生成器函数进阶

  1.生成器函数进阶(一)

 1 # 生成器函数进阶
 2 
 3 def generator():
 4     print(123)
 5     num = yield 1   # 当第一个__next__发生时,yiled 1先被执行,被返回,停在了这里,之后当send来了后,send的参数先赋值给了yield的左值,之后再执行下一个yield之前的代码
 6                     # send()获取yield值之前,会给上一个yield的位置传递一个参数数据,这个数据可以被上一个yield的左值接收
 7                     # 使用生成器的send()方法,就是在触发yield时,会将send传递过去的参数赋值到上一个yield的左值位置,然后在执行上一次yield和本次触发yield之间的代码
 8     print('----', num)
 9     print(456)
10     yield 2
11 
12 g = generator()
13 ret = g.__next__()
14 print('**', ret)
15 # send()调用后,会在获取下一个yield值之前,会给上一个yield的位置传递一个参数数据,这个数据可以被上一个yield的左值接收
16 ret = g.send('hello')   # ---- hello\n456  和__next__效果类似,只不过多了一个将参数赋值给了上一个yield,可以赋值给上一个yield的左值
17 print('**', ret)
View Code

 

  2.生成器函数进阶(二)

 1 # 获取移动平均值(预激生成器的装饰器的例子:使用装饰器激活生成器)
 2 def init(func):
 3     def wrapper(*args, **kwargs):
 4         g = func(*args, **kwargs)
 5         next(g)
 6         return g
 7     return wrapper
 8 
 9 @init   # ==> average = init(average)
10 def average():
11     sum = 0
12     count = 0
13     avg = 0
14     while True:
15         num = yield avg
16         sum += num
17         count += 1
18         avg = sum / count
19 
20 avg_g = average()
21 #avg_g.__next__()
22 avg1 = avg_g.send(10)
23 print(avg1)
24 
25 
26 
27 # python3中新加入的生成器函数知识点 yield from
28 def generator():
29     a = 'abcde'
30     b = '12345'
31     yield from a    # 从一个容器中,一个一个返回其中的元素
32     yield from b
33 
34 g = generator()
35 for i in g:
36     print(i)    # a\nb\nc\nd\nd\ne\n1\n2\n3\n4\n5\n
View Code

 

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值