假设我有以下课程:
class MyGen(object):
def next(self):
return X()
def send(self, x):
return f(x)
是否可以使用yield
关键字将其表示为单个函数?假设我有g = MyGen()
。请注意,g.next()
不应致电f()
,g.send(x)
不应致电X()
,但f()
和X()
可以共享部分代码。
答案 0 :(得分:3)
此代码几乎相同:
def my_gen(x=None):
while True:
if x is None:
x = yield X()
else:
x = yield f(x)
一个区别是,在第一次调用None
之前,您无法向生成器发送值(next()
除外)。另一个区别是发送None
不会触发调用f()
,因为生成器无法区分send(None)
和next()
。
答案 1 :(得分:1)
Sven的配方正是要走的路,我只是想补充一点,如果你想在Python中了解更多关于生成器,协同程序等的内容,this site就是你要去的地方。