相关疑难解决方法(0)

什么是避免作为空列表的默认参数的pythonic方法?

有时,使用默认参数(即空列表)似乎很自然.然而,Python在这些情况下会出现意外行为.

例如,我有一个功能:

def my_func(working_list = []):
    working_list.append("a")
    print(working_list)
Run Code Online (Sandbox Code Playgroud)

第一次使用默认值调用它将起作用,但之后的调用将使用不断更新的列表.

那么,获得我想要的行为的pythonic方法是什么(每个调用都有一个新的列表)?

python python-3.x

90
推荐指数
4
解决办法
4万
查看次数

python函数默认参数只评估一次?

我是一个python初学者,阅读'python tutorial',它说如果我们有一个函数:

def f(a, L=[]):
     L.append(a)
     return L
print f(1)
print f(2)
print f(3)
Run Code Online (Sandbox Code Playgroud)

这将打印

[1]
[1, 2]
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

因为默认值只计算一次而list是可变对象.我能理解.

它说继续,如果我们不希望在后续调用之间共享默认值,我们可以:

def f(a, L=None):
   if L is None:           #line  2
       L = []            
   L.append(a)
   return L
print f(1)            
print f(2)
print f(3)
Run Code Online (Sandbox Code Playgroud)

这将输出:

[1]
[2]
[3]
Run Code Online (Sandbox Code Playgroud)

为什么呢?怎么解释这个.我们知道默认值只是被评估once,当我们调用f(2)时,L不是None而且if(第2行)不能为真,所以L.append(a)== [1,2].我可以猜出由于某种原因再次评估默认值,但是什么是'某种原因',只是因为python解释器看到了if L is None: L = []

python parameters function

30
推荐指数
3
解决办法
4908
查看次数

标签 统计

python ×2

function ×1

parameters ×1

python-3.x ×1