在Python中,可以根据其他参数指定函数参数的默认值吗?

43 投票
3 回答
16091 浏览
提问于 2025-04-16 09:17

假设我有一个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所说,你不能这样做。在你后面的例子中,可能会出现Nonearg2的一个有效值的情况。如果是这样的话,你可以使用一个哨兵值:

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'

撰写回答