您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

为什么使用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,[]在每次执行时都获取相同的对象并不正确,但是(在认参数的情况下)只执行一次然后保存。

python 2022/1/1 18:28:44 有178人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶