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的时候建立的