【发布时间】:2010-05-03 16:14:47
【问题描述】:
是否可以在 Python 3 中为变量参数列表设置默认值?
类似:
def do_it(*args=(2, 5, 21)):
pass
我想知道变量参数列表的类型是tuple,但这里不接受元组。
【问题讨论】:
是否可以在 Python 3 中为变量参数列表设置默认值?
类似:
def do_it(*args=(2, 5, 21)):
pass
我想知道变量参数列表的类型是tuple,但这里不接受元组。
【问题讨论】:
如果不是语法上的,那么取决于你想要什么行为:
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
应该这样做。
【讨论】:
初始化这样的列表通常不是一个好主意。
默认值只计算一次。当默认值是可变对象(例如列表、字典或大多数类的实例)时,这会有所不同。例如,以下函数在后续调用中累积传递给它的参数
def f(a, L=[]):
L.append(a)
return L
print f(1)
print f(2)
rint f(3)
这将打印出来
[1]
[1, 2]
[1, 2, 3]
我通常检查它是否传递了一些东西,如果没有,则在函数体中初始化它。
【讨论】: