Python中可变参数列表的默认值

7 投票
2 回答
4243 浏览
提问于 2025-04-15 22:17

在Python 3中,可以为可变参数列表设置默认值吗?

类似于:

def do_it(*args=(2, 5, 21)):
     pass

我在想,可变参数列表的类型是tuple,但这里不接受元组。

2 个回答

1

像这样初始化一个列表通常不是个好主意。

默认值只会被计算一次。这在默认值是可变对象时,比如列表、字典或者大多数类的实例,就会产生不同的效果。例如,下面这个函数会在后续调用时累积传入的参数。

def f(a, L=[]):
    L.append(a)
    return L

print f(1)
print f(2)
rint f(3)

这将会打印出

[1]
[1, 2]
[1, 2, 3]

我通常会检查是否有传入参数,如果没有的话,就在函数内部进行初始化。

7

如果不是语法上的问题,那就要看你想要什么样的效果:

def do_it(*args):
    if not args: args = (2, 5, 21)

或者

def do_it(a=2, b=5, c=21, *args):
    args = (a,b,c)+args

应该可以实现这个效果。

撰写回答