python基础(二十一、面试题)

17.面试题(难)
1)面试题1
友情提示:惰性机制,不到最后不拿值

2)面试题2
(1)求输出结果

改写代码:

通过调试模式,可以清楚看到代码的执行过程。
lst1.append(fn):列表lst1中存储的是fn函数的地址,4个函数中保存的函数都是i*x
lst2.append(m(2)):才开始真正执行函数,此时i=3,实参x=2,所以列表中4个元素都是6

(2)如何得到你想要的结果[0, 2, 4, 6]

返回值(lambda x: ix for i in range(4))的类型是生成器

改写代码:

for m in mul():第一次调用mul(),i=0,返回fn。接着执行lst.append(m(2)),此时的m就是fn函数的地址,调用m(2)=0
2=0。最后将0添加到列表lst中。
后面的过程以此类推,最终得到列表[0, 2, 4, 6]

(3)两个代码的区别:
代码1)返回的是列表,列表中保存着函数地址,函数表达式都是ix。调用函数时,循环从列表中取值,i不会循环,i已经是3了,传参x=2,结果是6.

代码2)返回的是生成器,for m in mul()每次取值,执行到yield就返回了函数地址,紧接着就会执行m(2)调用fn(x)数。得到i
x的结果,随着i的不同结果不同

原文地址:https://www.cnblogs.com/bdzxh/p/14069683.html