python的函数默认值

default value for the function python

我试图理解这个问题和答案:

python函数默认参数只计算一次?

为了理解它,我尝试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def f1(a, L=[]):
    if not L:
        print"L is empty"
        L = []
    L.append(a)
    return L

>>>f1(1)
L is empty
[1]
>>>f1(1)
L is empty
[1]

def f2(a, L=[]):
        if L:
            print"L isn't empty"
            L = []
        L.append(a)
        return L

>>>f2(1)
[1]
>>>f2(1)
L isn't empty
[1]

因此,我认为,在f1L的情况下,每次调用f1后,它都会再次分配给[]。但对于f2的情况,L不知何故不是空的?为什么?


当你这样做的时候:

1
L = []

…您不更改L引用的值;您更改引用L指向一个全新的列表[]

如果要清空L引用的列表,而不更改引用本身,则可以写入:

1
del L[:]

…或者使用诸如removepop这样的方法通过更改当前列表来工作。

下面是F1和F2动画形式,帮助您理解。(单击指定WebM。等待每个GIF都变白。gifs不同步,抱歉。)

f1

f2