Python3 send() 方法

 

初学python生成器时,对其大概的了解是:包含yield的函数是一个生成器,即便其中还包含return语句,依然是一个生成器。函数调用时并不运行函数体,而是返回一个迭代器。与迭代器一样使用。

但依然有疑问,生成器的 send方法是如何运作的?为什么当生成器被挂起时用它才有意义?


第一个疑问

看一段代码:

>>> def test(val=0):
    while True:
        y = yield val
        print(y)

>>> t = test() # 启用生成器
>>> next(t) 
0
>>> next(t)
None
0

这段代码是Next的使用,但唯独有一个疑问:

为什么第二次Next调用后,print(y)输出了None,而不是 0 ? 

因为赋值语句从等号右边开始

第一次Next调用后,执行等号右边的表达式 yield val,执行完后函数暂停运行,赋值操作根本没有被执行

当第二次再运行时才执行赋值(等号左半部分),而生成器恢复运行时,yield初始值为None,所以 y = None

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值