Python提供了一种为函数参数设置默认值的方法。一个例子是:
def f(x=3):
print(x)
这是一个原始类型,让我们试试对象:
def f(x=list()):
print(id(x))
f()
44289920
f()
44289920
同样的对象!我很惊讶这是习惯于C / C ++的方式。完成后,我现在明白默认值不是在调用时构建,而是在定义时。
所以我找到了解决方案:
def f(x=list()):
if len(x) == 0:
x = list()
print(id(x))
解决!但是以什么价格:在我看来这似乎不是一个非常干净的解决方案。
此解决方案依赖于使用len(x) == 0
作为识别默认值的方法,该默认值对我的函数而言是Ok,而对其他函数则不然,因此解决方案可以概括为:
def f(x=None):
if x is None:
x = list()
这可以缩短为:
def f(x=None):
x = x or list() # a bit shorter version
我的问题是,有没有更短或更好的方法来解决这个问题?会不会是?
答案 0 :(得分:2)
我仍然更喜欢“无”方法,但这里有一个新选项:如果只定义了类型,则创建一个新实例。
def f(x=list):
if isinstance(x, type): x = x()
print(id(x))