函数参数默认值不要使用可变对象
使用可变对象作为参数默认值,会引起意想不到的问题
代码示例:
import random
pre = 0
def test_func(mydict={}):
n = random.randint(5, 20)
print(f"n: {n}")
global pre
print(f"pre: {pre}")
for i in range(pre+1, n):
mydict[f"key_{i}"] = i
return mydict
运行结果:
运行之后,发现第二次运行的时候,mydict里包含了第一次运行的结果。
原因:
参数的默认值只在函数定义的时候创建,所以第二次运行的时候,对象没有重新创建,就带着第一次运行的结果
建议:
函数参数的默认值做好使用不可变对象