[PYTHON]如果函数中的默认参数为list…


Python定义函数的时候,可以设定参数的默认值,如果调用时没有相应传入参数,python会将默认值带入到函数内部。

>> def test(a, b=2):
… print(a)
… print(b)

>>> test(10,20)
10
20
>>> test(10)  #此例中,只传入一个参数,b默认为2
10
2

但是,如果默认参数为list,可能有时候表现的结果可能会出乎意料。看一下下面的例子,最终的结果会是什么。

def ListExtend(value, list=[]):
    list.append(value)
    return list

list1=ListExtend(4)
list2=ListExtend(‘abc’,[])
list3=ListExtend(‘m’)

print(list1)
print(list2)
print(list3)

 

运行结果:
[4, ‘m’]
[‘abc’]
[4, ‘m’]

你可能会想,list1不是应该是[4],list3不是应该是[‘m’]吗?难道不是每次调用默认参数list都应该重新初始化?
不是的。这涉及到python中针对函数默认参数的处理。当第一次不带参数调用ListExtend时候,python已经创建了一个新的list,当再次调用的时候,python不会重新创建list,而是继续使用之前创建的。因此,每一次不带参数调用都会在此list基础上进行append。


发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注