在 python 中是否需要在编译时声明默认参数?

Are there any ways around default parameters needing to be declared at compliation in python?

所以我在编写一些代码时发现,在递归定义事物时,您不能使用基于传入变量的默认变量的方法。一些表面研究表明 Python 要求在编译时声明这些。因此不允许以下内容。

    def foo(bar, potato = bar*bar):

        if(bar is 0): return potato
        potato -= bar
        return foo(bar-1, potato)

代码是废话。但如果它有效,它将 return (bar*(bar-1))/2.

我知道我可以简单地手动传递 potato,但是有没有其他方法可以在不使用全局或最初声明 potato 的情况下实现与此类似的功能?

您可以按照以下构成常见模式的方式进行操作。制作默认参数 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)