基本格式
x = yield 把yield的接收值,赋值给x
def foo():
while True:
x = yield # 函数执行到yield处,暂停,yield后面没有任何返回值,默认返回yield None
print("x's value is ", x) # next执行,打印出x的值,yield 没有接收任何传值,默认接收None,并赋值给x,
# 然后继续执行,返回循环体,又执行到yield处,暂停,返回None
g = foo()
print(next(g))
print(next(g))
# 运行结果如下:
# None
# x's value is None
# None
如何给yield传值
带有关键字yield
的函数的执行结果就是生成器,假设为g, 调用g.send(value)
方法,就可以给yield
传值。g.send(None)
就是给yield
传None
, 相当于没传,也就等同于next(g)
的执行效果。
注意,g.send(value)
的传值方式是基于一个暂停的位置。也就是说生成器函数必须先执行到yield处,暂停在那里,给yield传值,然后执行next(g)
。因此,在使用g.send(value)
给yield传值前,要进行初始化:next(g)
或者g.send(None)
。
我们可以用装饰器来做生成器的初始化:
def init(g_func): #定义装饰器函数
def