是否有任何方法需要在python中的compliation声明默认参数?

时间:2017-12-19 06:52:37

标签: python recursion default-parameters

所以我正在编写一些代码,并发现在递归定义事物时,你不能拥有一个基于传入变量的默认变量的方法。一些表面级别的研究表明,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。

我知道我可以简单地手动传入马铃薯,但是有没有其他方法可以制作类似于这项工作的东西而不使用全球或最初宣称马铃薯?

1 个答案:

答案 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)