【问题标题】:How to Loop x Times With Functional Style?如何使用功能样式循环 x 次?
【发布时间】:2012-11-15 10:14:39
【问题描述】:
我有这个递归函数:
def lifecycle(population):
...
lifecycle(new_population)
我想执行此循环 100 次。我想使用正确的功能风格。那么,我不能使用计数器吗?因为在函数式编程中为变量分配新值是不合适的。如何在功能上做到这一点?我正在使用 Python。
【问题讨论】:
标签:
python
functional-programming
iteration
【解决方案1】:
您可以递归地执行此操作,并通过添加一个递减(或递增)循环变量。
def lifecycle(population, n):
if n == 0:
return population
...
return lifecycle(new_population, n-1)
如果您希望它真正具有功能性,则必须返回总体,因为函数式编程不赞成副作用。
【解决方案2】:
例如这样的:
def lifecycle(population, n, maxN):
if n >= maxN: return
new_population = population
lifecycle(new_population, n+1, maxN)
lifecycle(['an initial population or something'], 0, 1000)
【解决方案3】:
技术上是这样的:
def lifecycle(population, i):
if i == 100:
return ...
...
return lifecycle(new_population, i + 1)
但这在 Python 中是一件非常非常愚蠢的事情(由于未优化尾调用,除了最小的示例外,所有示例都失败了)。只需使用一个循环,虽然它在后台使用可变状态,但其余程序可以完美运行。