Python函数的参数默认值
遇到一个坑,Python会将函数定义中的参数默认值存储在一个全局变量中:function.__defaults__
这导致一个问题,如果在函数的参数默认值中创建了一个对象,如果在后续的代码中修改了这个对象的属性,那么下一次调用函数时,参数的默认值将是修改后的对象!!!
考虑下面的代码:
def a(x = {}):
print(x)
return x
x = a() # print out {}
x['b'] = 1
y = a() # print out {'b': 1}
结论:在函数的默认值中,一定要使用不可变对象,避免默认值的对象被修改后,导致程序BUG。
参考资料:https://stackoverflow.com/questions/4841782/python-constructor-and-default-value