我具有以下形式的函数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
。