【python3】yield 关键字解读

python 关键字之yield

yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator

实例代码

def yield_test(n):  
    for i in range(n):  
        yield call(i)  
        print("i=",i)  
    #做一些其它的事情      
    print("do something.")      
    print("end.")  
  
def call(i):  
    return i*2  
  
#使用for循环  
for i in yield_test(5):  
    print(i,",")  

运行结果:

>>> 
0 ,
i= 0
2 ,
i= 1
4 ,
i= 2
6 ,
i= 3
8 ,
i= 4
do something.
end.
>>> 

解读

  1. 带有yield的函数理解为一个生成器
  2. yield(yield的参数返回给调用者)就是 return 返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后(下一行)开始
  3. 依次迭代生成0 2 4 6 8,所以说生成器只迭代一次。由于使用推导式迭代的对象保存在内存中,不使用与大量数据时,生成器则只会使用一次
  4. send(msg)与next()都有返回值,(send可以强行修改上一个yield表达式的值)它们的返回值是当前迭代遇到yield时,yield后面表达式的值,其实就是当前迭代中yield后面的参数
  5. 第一次调用时必须先next()或send(None),否则会报错,send后之所以为None是因为这时候没有上一个yield。可以认为.next() 等同于 .send(None)



参考资源

彻底理解Python中的yield,千若逸

posted @ 2020-02-04 11:18  燕山北  阅读(211)  评论(0编辑  收藏  举报