函数参数默认值不要使用可变对象
使用可变对象作为参数默认值,会引起意想不到的问题
代码示例:
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里包含了第一次运行的结果。
原因:
参数的默认值只在函数定义的时候创建,所以第二次运行的时候,对象没有重新创建,就带着第一次运行的结果
建议:
函数参数的默认值做好使用不可变对象
函数参数默认值陷阱
本文探讨了使用可变对象作为函数参数默认值时可能遇到的问题,并通过实例展示了这种做法如何导致意料之外的结果。建议使用不可变对象来避免此类问题。
46万+

被折叠的 条评论
为什么被折叠?



