Python中生成器函数中的代码重复

时间:2015-06-21 23:23:46

标签: python generator

程序编程的一个优点是能够将任何代码段提取到一个函数中,该函数可以在许多地方重用,从而减少代码重复。但是,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语句周围的代码?

1 个答案:

答案 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