惯用的python,管理函数中的默认参数

我经常遇到大多数人在函数或方法中管理默认参数值,如下所示:

def foo(L=None):
  if L is None:
    L = []

但是,我看到其他人做的事情如下:

def foo(L=None):
  L = L or []

我不知道我是否遗漏了一些东西但是,为什么大多数人使用第一种方法而不是第二种?它们是同样的东西吗?似乎第二个更清晰,更短.

最佳答案 他们不平等.

第一种方法准确检查,给定arg L为None.

第二次检查,L是以python方式为真.在python中,如果您在条件中检查列表,则规则如下:

>列表为空,则为False
>否则为真

那么提到的方法之间的区别是什么?比较这段代码.

第一:

def foo(L=None):
    if L is None:
        L = []
    L.append('x')
    return L

>>> my_list = []
>>> foo(my_list)
>>> my_list
['x']

第二:

def foo(L=None):
    L = L or []
    L.append('x')
    return L

>>> my_list = []
>>> foo(my_list)
>>> my_list
[]

所以首先没有创建新列表,它使用给定的列表.但第二个创造了新的.

点赞