过程式编程的优点之一是能够将任何代码提取到函数中,该函数可以在许多地方重用,从而减少代码重复。然而Python中的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
语句周围的代码?
最佳答案
在 Python 3.3 或更高版本中:
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
在早期的 Python(包括 Python 2)中:
def helper():
bar = get_some_value()
yield bar
save(bar)
def foo():
do_something()
for x in helper(): yield x
do_something_else()
# more code in between
for x in helper(): yield x
# finishing up
关于python - Python 生成器函数中的代码重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30970302/