【陷阱!】Python可变缺省参数
来源:互联网 发布:集成块型号查询软件 编辑:程序博客网 时间:2024/04/30 09:20
python中可以使用缺省参数。假设说我们定义一个下面的函数:
def f(a,L=[]):L.append(a)print L
函数中使用了一个L的缺省参数,缺省值是一个空的列表。
根据函数的定义,可以很明确的得到,f(1)的输出是[1]。
那么问题来了:
执行完f(1)之后,f(2)的输出会是多少呢?
很惊悚的是,输出是[1,2]
--------------------------------------------------
上面这个问题,原因是,缺省参数在python中是与函数绑定在一起的。
也就是说,一个函数中定义了一个缺省参数,那么这个参数会随着被调用而改变。
在一次调用中改变了缺省参数的值,可能会影响到这个函数的另外一次调用。
----------------------------------------------
下面的这个聊天记录可以解释。
-----------------------------------------------
[深圳]冒泡(691515082) 21:22:06
接下来再看一个例子
[深圳]冒泡(691515082) 21:22:18
[深圳]冒泡(691515082) 21:22:45
这里有人会问第二次为啥不是输出[2]
[深圳]冒泡(691515082) 21:23:14
原因是L的默认值[]是和f绑定在一起,每次调用f的时候用L来引用
[深圳]冒泡(691515082) 21:23:42
因此每次执行的时候,只是将L引用到这个对象,并非每次都新建一个列表然后引用给L
[深圳]冒泡(691515082) 21:24:13
这个列表是在建立f的时候建立的
- 【陷阱!】Python可变缺省参数
- python 可变参数的一个陷阱
- Ruby缺省参数、可变参数
- 关于PHP可变参数与缺省参数
- python-地址值判断、可变不可变类型、+=含义、global使用、缺省、不定长参数
- Scala可变参数列表,命名参数和参数缺省
- 可变参数模拟C++中缺省参数及重载
- 可变参数函数的陷阱 记下
- 陷阱!python参数默认值
- 陷阱!python参数默认值
- python的可变参数
- python可变参数
- Python中的可变参数
- Python可变参数
- Python可变长参数
- python 可变参数传递
- python中的可变参数
- python可变参数练习
- Flex4之皮肤定制【Skin类和Skin类】
- 退出程序
- *** -[CALayer release]: message sent to deallocated instance 0x914ac10
- Linux系统调用--getrusage函数详解
- 访问装配的部件
- 【陷阱!】Python可变缺省参数
- apache document api
- 图解git
- IP地址划分教程 子网划分教程 什么是子网掩码
- myeclipse包被分开了
- Chromium Design Document学习及翻译之Multi-process Architecture
- oralce函数大全
- onChange事件,在IE和FireFox,Chrome等不能生效的处理。(一个类似于微博输入框的功能,在用户动态输入文字的时候,修改提示(您还可以输入XX字))
- css 关闭input文本输入法