理解Python风格,函数的默认参数

Jes*_*vve 2 python function default-parameters

这在Python教程中有介绍,但我还是不太明白Python为什么会有这种风格。是纯粹的约定,还是有一些解释为什么 Python 对默认参数具有以下样式:

我的理解是 Python 更喜欢something=None而不是something=[]函数的默认参数。但是……为什么不使用something=[]?当然这是其他语言的约定,比如 C

以这两个例子为例,它们是等价的

def function(arr, L=[]):
    L.append(arr)
    return L
Run Code Online (Sandbox Code Playgroud)

def function(arr, L=None):
    if L is None:
        L = []
    L.append(arr)
    return L
Run Code Online (Sandbox Code Playgroud)

我的理解是,第一个是 Python 的“风格不正确”。为什么?

编辑:啊,我终于明白了。我上面不正确:这两个函数不等价。默认参数在定义函数时计算一次,而不是每次调用函数时!

Ale*_*der 5

当您将参数设置为列表的值时,它是在定义函数时分配的,而不是在调用时分配的。这就是为什么使用相同的输入参数多次调用函数会得到不同结果的原因。谨防!!!

def function(arr, L=[]):
    L.append(arr)
    return L

arr = [1, 2, 3]

>>> function(arr)
[[1, 2, 3]]

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