yield
语句似乎降低了这种能力,因为当yield
语句被提取到另一个函数中时,原始生成器函数变为普通函数,因此不能再用作生成器。
考虑这个例子:
def foo():
do_something()
bar = get_some_value()
yield bar
save(bar)
do_something_else()
# more code in between
bar = get_some_value()
yield bar
save(bar)
# finishing up
请注意,yield
语句周围的代码始终相同,但我们无法将其提取到函数中。
这是Python的已知缺陷还是有一种解决方法可以重用yield
语句周围的代码?
答案 0 :(得分:1)
在Python 3.3或更高版本中:
ViewController
早期的Pythons(包括Python 2):
def helper():
bar = get_some_value()
yield bar
save(bar)
def foo():
do_something()
yield from helper()
do_something_else()
# more code in between
yield from helper()
# finishing up