面试题整理

2,(此题有坑)下面代码打印的结果分别是_________,________,________.

def extendList(val,list=[]):  #可变的默认是参数,如果默认值参数是一个可变的数据类型,如果有人调用的时候改变了他,其他位置看到的也跟着改变
    list.append(val)
    return list
list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')

print('list1=%s'%list1)
print('list2=%s'%list2)
print('list3=%s'%list3)

结果:[10,'a'] 

  [123]

  [10,'a']

如果题变成:

def extendList(val,list=[]):  
    list.append(val)
    return list
list1 = extendList(10)
print('list1=%s'%list1)
list2 = extendList(123,[])
print('list2=%s'%list2)
list3 = extendList('a')
print('list3=%s'%list3)

结果:[10]

  [123]

  [10,'a']

 

def add(a, b):
    return a + b
def test():
    for r_i in range(4):
        yield r_i
g = test()
for n in [2, 10]:
    g = (add(n, i) for i in g)
print(list(g)) 
结果:[21,22,23,24]   
生成器面试题

 说明:惰性机制,不到最后不去拿值,所以

for n in [2,10]
    g = (add(n,i) for i in g) 
相当于:
for n in [2,10]
    g = (add(n,i) for i in (add(n,i) for i in g) ) 
惰性机制循环之后取值,所以只取10两次循环,最后结果:
[20,21,22,23]

 

posted on 2018-07-17 21:05  IT东  阅读(118)  评论(0)    收藏  举报

导航