所以我正在编写一些代码,并发现在递归定义事物时,你不能拥有一个基于传入变量的默认变量的方法。一些表面级别的研究表明,Python要求在编译时声明这些。因此,不允许以下情况。
def foo(bar, potato = bar*bar):
if(bar is 0): return potato
potato -= bar
return foo(bar-1, potato)
代码是hogwash。但如果它有效,它将返回(bar *(bar-1))/ 2。
我知道我可以简单地手动传入马铃薯,但是有没有其他方法可以制作类似于这项工作的东西而不使用全球或最初宣称马铃薯?
答案 0 :(得分:0)
你可以沿着以下几行构成一个经常看到的模式。设置默认参数None
并将其设置为相关值,如果适当的话 函数:
def foo(bar, potato=None):
if potato is None:
potato = bar * bar
if bar == 0:
return potato
potato -= bar
return foo(bar-1, potato)
如果你对行贪婪,你可以使用三元if-else
运算符:
def foo(bar, potato=None):
potato = bar * bar if potato is None else potato
return potato if bar == 0 else foo(bar - 1, potato - bar)