生成器和生成器表达式面试题解析
首先看一下面试题:打印结果会是什么呢?
def add(n, i): return n + i def test(): for i in range(4): yield i g = test() for n in [1,10]: g = (add(n, i) for i in g) # 生成器表达式,在此之上所有的代码都没有进行计算 print(list(g))
如何进行计算?碰到 for 循环时要拆开来计算;
当 n = 1 时:
g = (add(n, i) for i in g)
当n = 10
g = (add(n, i) for i in (add(n, i) for i in g)) # (add(n, i) for i in g) ---> (10+0,10+1,10+2,10+3) ---> (10,11,12,13)
g = (add(n,i) for i in (10,11,12,13)
g = (10+10,10+11,10+12,10+13)
g = (20,21,22,23)
这时 打印列表:list(g)结果:
[20, 21, 22, 23]