【发布时间】:2017-08-26 23:46:21
【问题描述】:
假设有一些有用的转换函数,例如random_spelling_error,我们想应用 n 次。
我的临时解决方案如下所示:
def reapply(n, fn, arg):
for i in range(n):
arg = fn(arg)
return arg
reapply(3, random_spelling_error, "This is not a test!")
有没有内置的或其他更好的方法来做到这一点?
它不需要处理可变长度的 args 或关键字 args,但它可以。该函数将被大规模调用,但 n 的值会很小,并且参数和返回值的大小会很小。
我们可以称它为reduce,但这个名称当然是用于可以执行此操作的函数以及更多功能,并在 Python 3 中被删除。这里是 Guido's argument:
所以在我看来,reduce() 的适用性非常有限 关联运算符,在所有其他情况下最好写出 明确的累积循环。
【问题讨论】:
-
查看 R 的解决方案:stackoverflow.com/questions/29237136/…
-
我认为您的循环没有任何问题或“un-pythonic”。是的,也许你可以用一行而不是三行来做,但有什么用呢?立即清楚它应该做什么,使其 very pythonic 恕我直言。
-
@tobias_k 我同意它按原样可读(且高效),我只是想知道是否有约定或者我是否复制了某些内容,因为这项任务看起来很普通。
标签: python python-3.x tail-recursion built-in