def func(a,b=[]): b.append(a) print(b) func(1) func(2,[11,22,33]) func(3) #执行结果: [1] [11,22,33,2] [1,3] #此时每个func函数是立即打印所以会出现不同结果
def func(a,b=[]): b.append(a) return b l1 = func(1) l2 = func(2,[11,22]) l3 = func(3) print(l1,l2,l3) #执行结果: [1,3] [11,22,2] [1,3] 函数的第二个默认参数是一个list,当第一次执行的时候实例化了一个list,第三次执行还是用第一次执行的时候实例化的地址存储, 所以第一和第三次执行的结果就是相同的,想每次执行只输出当前传入参数 ,默认参数应该设置为None。
def add_end(L=[]): L.append(‘END‘) return L
>>> add_end([1, 2, 3]) [1, 2, 3, ‘END‘] >>> add_end([‘x‘, ‘y‘, ‘z‘]) [‘x‘, ‘y‘, ‘z‘, ‘END‘]
>>> add_end() [‘END‘]
>>> add_end() [‘END‘, ‘END‘] >>> add_end() [‘END‘, ‘END‘, ‘END‘]
def add_end(L=None): if L is None: L = [] L.append(‘END‘) return L
>>> add_end() [‘END‘] >>> add_end() [‘END‘]
原文:https://www.cnblogs.com/kuangfengnulang/p/14719362.html