函数python的默认值

时间:2015-01-16 23:05:35

标签: python

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

python function default parameter is evaluated only once?

为了理解它我尝试:

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]

所以我认为,f1 L每次都会变空 - 每次调用[]后都会再次分配给f1。但是,如果f2 L在某种程度上不是空的?为什么呢?

1 个答案:

答案 0 :(得分:6)

执行此操作时:

L = []

...您不能更改L引用的值;您将参考 L更改为指向全新列表[]

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

del L[:]

...或使用removepop等方法,通过更改当前列表来工作。


这里的f1和f2以动画形式帮助您理解。 (点击webm。等待每个gif淡出白色.GIF不同步,抱歉。)

f1

f2