在 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)
所以我在编写一些代码时发现,在递归定义事物时,您不能使用基于传入变量的默认变量的方法。一些表面研究表明 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)