我通常遇到的情况是,大多数人会像这样在函数或方法中处理默认参数值:
def foo(L=None):
if L is None:
L = []
然而,我看到其他人在做这样的事情:
def foo(L=None):
L = L or []
我不知道是否有遗漏,但为什么大多数人使用第一个方法而非第二个方法?它们是否完全相同?第二个方法似乎更清晰、更简短。
L
是否为None
。第二种方法检查L
在Python中的真实性。在Python中,如果您在条件中检查列表,则规则如下:
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
[]
第一个并没有创建新的列表,而是使用了给定的列表。但是第二个创建了一个新的列表。
也许他们不知道第二个?我倾向于使用第一个。
实际上有区别。如果传递任何计算为布尔假的值,如0、空字符串或其他值,第二个将使L=[]。只有在未传递L或将其作为None传递时,第一个才会这样做。