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

时间:2010-05-03 16:14:47

标签: python function arguments

是否可以在Python 3中为变量参数列表设置默认值?

类似的东西:

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

我想知道变量参数列表的类型为tuple,但这里没有接受元组。

2 个答案:

答案 0 :(得分:5)

如果不是语法上的话,那么取决于你想要的行为:

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

应该这样做。

答案 1 :(得分: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]

我通常检查传入的内容,如果没有,则在函数体中初始化它。