生成器和生成器表达式面试题解析

首先看一下面试题:打印结果会是什么呢?

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]

  

转载于:https://www.cnblogs.com/artfeb/p/10801817.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值