我经常遇到大多数人在这样的函数或方法中管理默认参数值:
def foo(L=None):
if L is None:
L = []
但是我看到其他人在做类似的事情:
def foo(L=None):
L = L or []
我不知道我是否遗漏了什么,但是,为什么大多数人使用第一种方法而不是第二种方法?它们是一样的吗?,似乎第二个更清晰,更短。
最佳答案
它们不相等。
第一种方法准确检查给定的 arg L
是否为 None
。
第二次检查,L 以 python 方式为真。在 python 中,如果您检查条件列表,规则如下:
- List为空,则为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
[]
所以首先没有创建新列表,它使用给定的列表。但是第二个创建了新的。
关于python - 惯用的 python,管理函数中的默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16386627/