Python缺省参数应该怎么理解它的作用,python缺省参数理解,看Default Par
Python缺省参数应该怎么理解它的作用,python缺省参数理解,看Default Par
看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())的值为什么不同呢?
参考:Python的默认参数
默认参数只被计算一次。
上者是修改,下者是赋值,不一样:一个是对一个对象操作,一个是更替对象!
在参数列表里的值只计算一次,实际上每次赋给data的是最初创建的[]对象的引用。
第一个例子中 data 是固定的,因此 id(data) 是固定的。原因请参考官方文档第4.7.1节最后的Important warning。
第二个例子中每次 value 都是一个新的 list,因此每次 id(value) 都不一样。
编橙之家文章,
相关内容
- Python3.3代码代码数据引用问题求解,python3.3求解,如题,
- swoole可不可以替代ajax轮询,swooleajax轮询,swoole可以代替
- Python读取数据库后如何生成html网页,python数据库,数据
- 请问Numpy里有可以实用且高效制矩阵的好方法吗?,num
- django1.6 shell下访问对象出错AttributeError,,开发环境是
- Flask响应内容为图片时怎么体现,,比如请求 http://
- 想用Python去掉{通配符}正则表达式怎么写,python正则表
- Python音频格式转换问题m4a转amr,pythonm4a,如何实现m4a 转
- 请问Python web应用使用哪种目录结构来组织代码比较好,
- Python语言file和open区别是什么,python语言fileopen,Python里
评论关闭