生成器面试题1

 1 def demo():  # 生成器函数
 2     for i in range(4):
 3         yield i
 4 
 5 g = demo()  # 得到一个生成器,demo中的代码没有被执行
 6 
 7 g1 = (i for i in g)     # ()所以是生成器表达式,得到了一个生成器g1,生成器表达式的代码一句也没有被执行
 8 g2 = (i for i in g1)    # 生成器表达式,得到了一个生成器g2,生成器表达式的代码没有被执行
 9 
10 print(list(g1))     # [0, 1, 2, 3]      # 此时使用数据类型强制转换的方式从生成器g1中取值,所以g1对应的生成器表达式开始执行,全部执行完毕,g1生成器没有东西了
11 print(list(g2))     # []    # 此时取值,g2对应的表达式开始执行,表达式中遍历g1生成器,但是g1生成器值已经取完了,所以这里为[]
12 
13 # -------------------------------------------
14 
15 def add(n, i):
16     return n + i
17 
18 def test():
19     for i in range(4):
20         yield i
21 
22 g = test()
23 
24 for n in [1, 10]:
25     g = (add(n, i) for i in g)  # 拆开看
26 
27 print(list(g))  # [20, 21, 22, 23]
28 
29 
30 # n = 1
31 #g = (add(n, i) for i in test())
32 
33 # n = 2
34 # g = (add(n, i) for i in (add(n, i) for i in test()))
35 
36 #list(g)
View Code

 

转载于:https://www.cnblogs.com/whylinux/p/9623488.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值