Skip to main content
 首页 » 编程设计

python之Python 中的 None check 和 var 或 default 语法有什么区别

2025年05月04日18cloudgamer

我注意到这个语法被列为一个陷阱,但没有解释原因:

def func(x=None): 
    #good 
    if x == None: 
        x = [] 
 
    #bad 
    x = x or [] 

这在哪些方面可能是一个陷阱?

请您参考如下方法:

在这种特殊情况下,这很糟糕,因为空列表的计算结果为 false。如果你改变列表,那么结果将不会像预期的那样

def func(x=None): 
    x = x or [] 
    x.append('hello') 
 
mylist = [] 
func(mylist) 
print mylist[0] # doesn't work 

既然你想检查调用者是否传递了 None ,你应该明确地说出来而不是耍小聪明。 []、()、{}、0 和 False 等对象评估为 false,就像任何想要的用户定义对象一样 - 检查是否为假确实会捕获太多误报。

(另外:使用 is None 而不是 == None can be faster and more reliable 。)