python 当函数的形参默认值为可变对象时

强调一点,函数形参的默认值只计算一次,发生在函数定义域定义的时候。

例如:

i = 5
def f(arg=i):
    print arg

i = 6
f()

以上代码将打印5而不是6.

再看一个比较明显的例子,当默认参数为可变的对象如列表、字典或大部分类的实例时:

def f(a, L=[]):
    L.append(a)
    return L

print f(1)
print f(2)
print f(3)

将输出以下结果:

[1]
[1, 2]
[1, 2, 3]

这是因为定义函数的时候,变量L指向了一片内存地址,在后面的反复调用过程中L始终指向同一片内存地址,append的操作都在对同一个列表进行操作。如果这不是你想要的结果,可以试试下面这种写法:

def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L

猜你喜欢

转载自blog.csdn.net/wujj200884/article/details/84991701
今日推荐