面试题整理
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]
浙公网安备 33010602011771号