Python 手册的 Tutorial.pdf 中 “ 4.7.1 参数默认值” 有如下的例子:
def f(a, L=[]): L.append(a) return L print(f(1)) print(f(2)) print(f(3)) 这将打印出
[1] [1, 2] [1, 2, 3] 如果你不想要在后续调用之间共享默认值,你可以这样写这个函数:
def f(a, L=None): if L is None: L = [] L.append(a) return L 我家高中生刚学编程,把程序改为如下进行测试,问我 f3 和 f1 的 L 到底差别在哪儿,把我搞懵了,哪个能给出一个简单、初学编程的人听得懂的解释(我只能给他解释 f1 的 L 是可变对象,f3 的 L 是不可变对象?)
def f1(a, L=[]): print("id(L) = ", id(L)) print("L = ", L) print() L.append(a) return L def f3(a, L=None): print("id(L) = ", id(L)) print("L = ", L) if L is None: # 为何每次成立? L=[] print("id(L) = ", id(L)) print() L.append(a) return L if __name__ == "__main__": f1(1) f1(2) f1(3) print('-'*40) f3(1) f3(2) f3(3) 执行时打印出:
id(L) = 2405815737608 L = [] id(L) = 2405815737608 L = [1] id(L) = 2405815737608 L = [1, 2] ---------------------------------------- id(L) = 1983976656 L = None id(L) = 2405815759368 id(L) = 1983976656 L = None id(L) = 2405815759368 id(L) = 1983976656 L = None id(L) = 2405815759368 