dict.get('..', None)或None的情况是什么?

11

如果在某些开源库中发现以下代码:

message.get('title', None) or None
有没有任何理由这样做而不是像这样 message.get('title', None)

.get(..., None) 中的 None 实际上是多余和不必要的。 - deceze
3个回答

26
这将确保字典中的任何假值(例如None''0False[]等)都将变为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 sottile

1
如果您收到的消息是一个假值,这将把它更改为None。
例如:
message = {'title' : ''}

message.get('title', None)
>> ''

message.get('title', None) or None 
>> None

-1

有一个原因。

例如,message.get('title', None) or None 可能会返回一个空字符串。在 Python 中,空字符串的布尔值为 False,因此将返回 None

这也适用于从 dict 返回的任何其他值,其求值结果为 False。将返回 None

注意:然而,那段代码最好写成 message.get('title') or None,因为无论如何 dict.get 默认都会返回 None(第二个参数)。


不,它不会返回空字符串。 - Tjorriemorrie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接