如果在某些开源库中发现以下代码:
message.get('title', None) or None
有没有任何理由这样做而不是像这样 message.get('title', None)
?如果在某些开源库中发现以下代码:
message.get('title', None) or None
有没有任何理由这样做而不是像这样 message.get('title', None)
?None
,''
,0
,False
,[]
等)都将变为None
。即如果您有
d = {'title': False}
然后
d.get('title', None) # False
d.get('title', None) or None # None
无论这是否有实际应用场景都存在争议,但其中肯定存在微妙的差异...
d.get('title') or None
由于d.get
默认返回None
,如果没有找到元素。
os.environ.get('VAR') or 'some_default'
,这样 $ VAR= python ...
将等效于未设置。 - anthony sottilemessage = {'title' : ''}
message.get('title', None)
>> ''
message.get('title', None) or None
>> None
有一个原因。
例如,message.get('title', None) or None
可能会返回一个空字符串。在 Python 中,空字符串的布尔值为 False
,因此将返回 None
。
这也适用于从 dict
返回的任何其他值,其求值结果为 False
。将返回 None
。
注意:然而,那段代码最好写成 message.get('title') or None
,因为无论如何 dict.get
默认都会返回 None
(第二个参数)。
.get(..., None)
中的None
实际上是多余和不必要的。 - deceze