所需代码的说明:将值附加到python中的列表

时间:2017-11-17 05:00:43

标签: python list append

任何人都要解释一下......

def f(i,list1=[]):

     list1.append(i)

     return list1


f(1)

f(2)

print(f(3))

输出:[1,2,3]。

我无法理解这一点,因为每次我的list1被初始化为空列表。

任何人都可以解释这个吗?

1 个答案:

答案 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