2016-11-14 81 views
-1

对不起,我真的不知道如何准确地描述了在标题这个问题Python变量奇怪的问题

我这样定义

def f(v,l=[]): 
    l.append(v) 
    return l 

在我的理解一个功能,输出应该是这样的:

第一呼叫应返回[0]

第二呼叫应返回[1]

第三调用应该返回[2]

但是...这里是真正的输出

>>> f(0) 
[0] 
>>> f(1) 
[0, 1] 
>>> f(2) 
[0, 1, 2] 
+3

不使用'L = []'因为Python创建这个'[]'只有一次,当脚本被加载。 – furas

+1

更确切地说,当函数定义被执行时,而不是函数被调用时,默认参数被评估。 –

回答

4

你要做

def f(v, l=None): 
    if l is None: 
     l = [] 
    l.append(v) 
    return l 

因为l=[]创建这个列表[]只有一次当脚本被加载时。

更精确的(如@ PM2Ring所说的)它是在执行函数定义时创建的,而不是在函数被调用时创建的。

参见: