在Python中,可以根据其他参数指定函数参数的默认值吗?
假设我有一个Python函数,它需要两个参数,但我希望第二个参数是可选的,默认值是第一个参数传入的值。所以,我想做的事情是这样的:
def myfunc(arg1, arg2=arg1):
print (arg1, arg2)
但是这样做不行。我能想到的唯一解决办法是:
def myfunc(arg1, arg2=None):
if arg2 is None:
arg2 = arg1
print (arg1, arg2)
有没有更好的方法来实现这个呢?
3 个回答
4
我觉得第二种方法挺好的:这样做非常清楚明了,后面看你代码的人也能一眼明白你在干什么。虽然在记录默认行为上会有一点额外的工作,但使用'None'或者其他方式让你的函数生成默认值是很常见的做法。我认为把逻辑放在函数调用里并不太好,这样很快就会变得复杂。所以就把这些逻辑留在函数内部,所有代码都在那儿。
8
其实不是这样的。其他参数的名字在函数真正被调用之前是不存在的。
30
正如@Ignacio所说,你不能这样做。在你后面的例子中,可能会出现None
是arg2
的一个有效值的情况。如果是这样的话,你可以使用一个哨兵值:
sentinel = object()
def myfunc(arg1, arg2=sentinel):
if arg2 is sentinel:
arg2 = arg1
print (arg1, arg2)
myfunc("foo") # Prints 'foo foo'
myfunc("foo", None) # Prints 'foo None'