如何用python中的模板函数表示生成器函数

时间:2019-06-01 10:44:14

标签: python design-patterns generator yield

我具有以下形式的函数my_algorithm

  • 反复生成一些项目
  • 在每个项目上调用摘要inner_fn
def my_algorithm(*args, inner_fn, **kwargs):
    for ...: # many nested loops go here
         inner_fn(next_item) # call monitor on each item

因此,my_algorithm代表一种“外部算法”,其内部行为参数化为inner_fn

将内部行为抽象化的另一种方法是使用生成器:

def my_algorithm_iter(*args, **kwargs):
    for ...: # many nested loops go here
        yield next_item

这两个概念提供了不同的用户界面,即

my_algorithm(*a, my_inner_fn, **kw)

vs。

for item in my_algorithm_iter(*a, **kw):
    my_inner_fn(item)

要提供两个没有代码重复的斜体,可以使用my_algorithm来定义my_algorithm_iter,如下所示:

def my_algorithm(*agrs, inner_fn, **kwargs):
    for item in my_algorithm_iter(*args, **kwargs):
        inner_fn(item)

我想知道,是否还有一种简单的解决方案,可以通过my_algorithm_iter来表达my_algorithm

0 个答案:

没有答案