1、Python列表作为一般的变量(非函数参数) + 与 append作用基本一致:在后面添加一个元素
>>> L = [1,2]
>>> L = L + [3]
>>> L
[1, 2, 3]
>>> L.append(4)
>>> L
[1, 2, 3, 4]
>>>
2、Python列表 作为函数参数,且有默认值情况下, + 与append 表现有所差异:
1)+ 不会累积之前往列表添加的元素:
>>> def fun(i, L = []): # + operator test
... L = L + [i]
... return L
...
>>> fun(1)
[1]
>>> fun(2)
[2]
>>> fun(3)
[3]
>>>
2)append 会累积之前往列表里添加的元素:
>>> def fun2(i, L = []): # append test
... L.append(i)
... return L
...
>>> fun2(1)
[1]
>>> fun2(2)
[1, 2]
>>> fun2(3)
[1, 2, 3]
>>>
3)可以通过适当的添加判断赋值操作,让 append也不会累积之前添加的元素:
>>> def fun3(i, L = []): # modified append test
... if L == []:
... L = []
... L.append(i)
... return L
...
>>> fun3(1)
[1]
>>> fun3(2)
[2]
>>> fun3(3)
[3]
>>>
Ps: Python函数参数的默认值一般情况下,只被赋值一次,在可变的对象变量:如列表、字典、某些类对象实例,会有不同:
1)一般情况下变量,默认值在函数定义的作用域内被解析,只赋值一次:
>>> i = 5
>>> def fun(arg = i):
... print(arg,i)
...
>>> fun()
5 5
>>> i = 6
>>> fun()
5 6
>>> i = 7
>>> fun()
5 7
>>>
2)对于列表可变对象等情况,则如上讨论的在会出现不同的情况: