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

Isr*_*ael 6 python list append

有人解释一下......

def f(i,list1=[]):

     list1.append(i)

     return list1


f(1)

f(2)

print(f(3))
Run Code Online (Sandbox Code Playgroud)

输出:[1,2,3].

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

谁能解释一下这个?

JGC*_*JGC 2

您不应在参数声明中包含列表创建。

def f(i, list1=[]):这是因为该行在到达 .txt文件时实际上创建了一个新列表[]。创建函数时会发生这种情况。

每次该函数运行时,它都会重新使用同一个列表对象。

从程序如何逐行运行的角度来思考。实际上,def该行在运行时最终看起来像这样:

def f(i, list1=<a-new-list-that-I-just-created>):
Run Code Online (Sandbox Code Playgroud)

并且每次调用函数时,list1默认值并不是一个新的列表,而是定义函数时创建的列表。

我相信这就是你想要的,如果你想避免这种情况,就是:

def f(i, list1=None):
   if not list1:
       list1=[]
   list1.append(i)
   return list1
Run Code Online (Sandbox Code Playgroud)