Python 将函数的可选参数设置为list

Python 将函数的可选参数设置为list,python,list,function,arguments,optional-arguments,Python,List,Function,Arguments,Optional Arguments,如何将函数的可选参数设置为列表 def fun1(text, where = my_list): #my_list.append(text) where.append(text) print(where) #return where my_list = [] fun1('hi') print(my_list) # currently #['hi'] #[] # expected #['hi'] #['hi'] Spyder中出现未定义名称my_list错误。

如何将函数的可选参数设置为列表

def fun1(text, where = my_list):
    #my_list.append(text)
    where.append(text)
    print(where)
    #return where

my_list = []
fun1('hi')
print(my_list)

# currently
#['hi']
#[]
# expected
#['hi']
#['hi']

Spyder中出现未定义名称my_list错误。

我认为您应该在函数之前定义列表,如下所示:

my_list = []
def fun1(text, where = my_list):
  #my_list.append(text)
  where.append(text)
  print(where)
  #return where
fun1('hi')

如果您想打印一次,请不要使用printmy_列表。将其打印为fun1的where INDER

您应该使用**kwargs来设置函数中任何意外的参数。并使用kwargs['where']来实现'where'键,如下所示:

def fun1(text, **kwargs):
    kwargs['where'].append(text)
    print(kwargs['where'])

my_list = []
fun1('hi',where=my_list)
print(my_list)

你不想那样做。将此行my_list=[]放在def之前。但是你应该避免使用可变参数作为默认参数,这是pythonIt非常糟糕的体系结构解决方案中一个非常常见的问题,不要这样做。为什么从设计角度来看它不好?如果我调用函数m次,n次,它涉及到我的_列表,其中n接近m,这有点道理?这回答了你的问题吗?我希望避免使用我的_列表调用fun1。这不会永久附加我的_列表,即在fun之外。