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