任何人都要解释一下......
def f(i,list1=[]):
list1.append(i)
return list1
f(1)
f(2)
print(f(3))
输出:[1,2,3]。
我无法理解这一点,因为每次我的list1被初始化为空列表。
任何人都可以解释这个吗?
答案 0 :(得分:2)
您不应在参数声明中包含列表创建。
这是因为def f(i, list1=[]):
的行在到达[]
时实际创建了一个新列表。创建函数时会发生这种情况。
每次运行该函数时,它都会重新使用相同的列表对象。
根据程序的运行方式逐行思考。实际上,def
行在运行时最终看起来像这样:
def f(i, list1=<a-new-list-that-I-just-created>):
每次调用该函数时,list1默认值都不是 new 列表,而是定义函数时创建的列表。
我相信这就是你想要的,如果你想避免这种情况,那就是:
def f(i, list1=None):
if not list1:
list1=[]
list1.append(i)
return list1