在定义时解析默认值。所以这不会起作用
def f(x, func = f):
if x<1:
return x
else:
return x + func(x-1)
但是,我确实找到了办法。我从一些虚拟函数开始
def a(x):
return x
def f(x, func=a):
if x < 1:
return x
else:
return x + func(x-1)
然后发出
f.__defaults__ = (f,)
显然很尴尬。有另一种方式还是这种糟糕的蟒蛇?如果不好,你能解释一下原因吗?它会破坏什么?
无论如何,它都有效:
In [99]: f(10)
Out[99]: 55
In [100]: f(10, f)
Out[100]: 55
In [101]: f(10, lambda x : 2*x)
Out[101]: 28
答案 0 :(得分:3)
详细说明Andrea Corbellini的建议,你可以这样做:
def f(x, func=None):
if func is None:
func = f
if x < 1:
return x
else:
return x + func(x-1)
在Python中实现函数内部的实际默认值并将默认参数定义为None
(或None
中的某个私有sentinel对象是有效输入),这是一个非常标准的习惯用法可变默认值的问题,例如list
个对象。