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。