函数的默认值只会在程序加载模块并读取到该函数的定义时设置一次
也就是说,如果给某参数赋予动态的值( 比如[]
或者{}
),则如果之后在调用函数的时候给参数赋予了其他参数,则以后再调用这个函数的时候,之前定义的默认值将会改变,成为上一次调用时赋予的值:
def get_default(value=[]):
return value
result=get_default()
result.append(1)
result2=get_default()
result2.append(2)
print(result)# [1, 2]
print(result2)# [1, 2]
因此,更推荐使用
None
作为默认参数,在函数内进行判断之后赋值:
def get_default(value=None):
if value is None:
return []
return value
result=get_default()
result.append(1)
result2=get_default()
result2.append(2)
print(result)# [1]
print(result2)# [2]