为什么使用arg = None可以解决Python可变的默认参数问题?

为什么使用arg = None可以解决Python可变的默认参数问题?,第1张

为什么使用arg = None可以解决Python可变的默认参数问题?

a_list
初始化后的默认值(或其他任何默认值)将在函数内部存储,因此可以通过任何方式进行修改

>>> def f(x=[]): return x...>>> f.func_defaults([],)>>> f.func_defaults[0] is f()True

分别 对于Python 3:

>>> def f(x=[]): return x...>>> f.__defaults__([],)>>> f.__defaults__[0] is f()True

因此,in中的值

func_defaults
内部函数众所周知(在我的示例中返回,以便从外部访问它)。

IOW,调用时发生的

f()
是隐式
x = f.func_defaults[0]
。如果该对象随后被修改,则将保留该修改。

相反,函数 内部 的赋值始终为new

[]
。任何修改将一直持续到最后一个引用
[]
消失为止。在下一个函数调用上,将
[]
创建一个新的。

再次使用IOW,

[]
在每次执行时都获取相同的对象并不正确,但是(在默认参数的情况下)只执行一次然后保存。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5655157.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存