练习(面试题):关于生成器函数的求和问题

 
 
# 求和  ***面试重点的题***
def add(a, b):
return a + b

# 生成器函数 # 0-3
def test():
for i in range(4):
yield i

g = test() # 获取生成器 g的取值范围 0,1,2,3
for n in [2, 10]:
g = (add(n, i) for i in g)
print(list(g))


# for循环等价于
# n = 2
# g = (add(n, i) for i in g)
# n = 10
# g = (add(n, i) for i in g) #此时括号里的g 是n=2 循环的时候的g 实际上是g = (add(n, i) for i in (add(n, i) for i in g))
# 当执行到最后一行 list(g)的时候,因为list中的__next__() 会触发生成器开始取值, 此时的n=10.
# 所以把n=10 带入g = (add(n, i) for i in (add(n, i) for i in g))
# g = (add(10, i) for i in (add(10, i) for i in g)) g取值范围 0-3 带入
# 结果 [20, 21, 22, 23]

猜你喜欢

转载自www.cnblogs.com/kenD/p/9470394.html