yield详解:
3. (译)Python关键字yield的解释(stackoverflow) — 一起写Python文章,一起看Python文章
python中yield用法_-牧野-的博客-优快云博客_python yield用法
yield 是一个类似 return 的关键字,只是这个函数返回的是个生成器。
当使用这个生成器的时候,第一次迭代中你的函数会执行,从开始到达 yield 关键字,然后返回 yield 后的值作为第一次迭代的返回值,并且记住这个返回的位置,下次迭代就从这个位置后(下一行)开始,继续执行你在函数内部定义的那个循环的下一次,再返回那个值,直到没有可以返回的。
# python2
def func(n):
for i in range(0,n):
a = yield i #若不调用send,则a值总为None
print a
f = func(10)
f.next()
f.send(2)
f.send(10)
print f.next()
# python3
def func(n):
for i in range(0,n):
a = yield i #若不调用send,则a值总为None
print(a)
f = func(10)
next(f)
f.send(2)
f.send(10)
print(next(f))
- 简要理解:yield就是 return 返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后(下一行)开始。
- 我理解yield可放在任何循环体中构成生成器。
- send(msg)与next()的区别在于send可以传递参数给yield表达式,这时传递的参数会作为yield表达式的值,而yield的参数是返回给调用者的值。——换句话说,就是send可以强行修改上一个yield表达式值。比如函数中有一个yield赋值,a = yield 5,第一次迭代到这里会返回5,a还没有赋值。第二次迭代时,使用.send(10),那么,就是强行修改yield 5表达式的值为10,本来是5的,那么a=10
- send(msg)与next()都有返回值,它们的返回值是当前迭代遇到yield时,yield后面表达式的值,其实就是当前迭代中yield后面的参数。
- 第一次调用用next()或send(None)。
本文详细解析了Python中yield关键字的使用方法,包括其在生成器中的作用、与return的区别,以及如何配合send()和next()函数进行迭代控制。通过实例展示了yield如何返回值并保存状态,以及send()如何向生成器传递参数。
1万+

被折叠的 条评论
为什么被折叠?



