如何理解python中的缺省参数?
大家讲道理
大家讲道理 2016-11-12 14:57:36
[PHP讨论组]

看Default Parameter Values in Python这篇文章时, 下面示例:

>>> def function(data=[]):
...     data.append(1)
...     return data
... 
>>> function()
[1]
>>> function()
[1, 1]
>>> function()
[1, 1, 1]
>>> id(function())
3076744140L
>>> id(function())
3076744140L

说明python实际上是先把默认参数的值计算出来,以后每次调用都是用以前计算出的值. 这里每次function调用使用同一个data, 这里的data是可变对象, 因此data的值不断append.

那么下面的例子:

>>> def myfunc(value=None):
...     if(value is None):
...             value=[]
...     value.append(5)
...     return value
... 
>>> myfunc()
[5]
>>> myfunc()
[5]
>>> id(myfunc())
3070938636L
>>> id(myfunc())
3070938284L
>>> id(myfunc())
3070938284L

None是一个常量, 是一个不可变对象, 每次调用myfunc()时value都是None,但是id(myfunc())的值为什么不同呢?


大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(3)
代言

在参数列表里的值只计算一次,实际上每次赋给data的是最初创建的[]对象的引用。

大家讲道理

第一个例子中 data 是固定的,因此 id(data) 是固定的。原因请参考官方文档第4.7.1节最后的Important warning。

第二个例子中每次 value 都是一个新的 list,因此每次 id(value) 都不一样。


大家讲道理

默认参数只被计算一次。

上者是修改,下者是赋值,不一样:一个是对一个对象操作,一个是更替对象!


热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号