这个结构的官方名称是什么?

时间:2010-02-24 08:01:46

标签: python

在python中:

>>> a = b or {}

5 个答案:

答案 0 :(得分:10)

我认为它没有官方名称,只是一种简洁明了的聪明/懒惰方式。它大致相当于:

a = b if b else {}

或:

if b:
    a = b
else:
    a = {}

我写这篇评论作为评论,但我认为值得一提:

使用这个技巧时你必须非常小心。如果您打算在某些内容为None时设置默认值,那么明确地编写is None测试比使用此技巧更好。原因是None不是唯一在布尔上下文中求值为false的东西。 0,[],{},...也评估为false。因此,如果您没有考虑这些特殊情况,这个技巧可能无法给您预期的结果。

这是一种更安全的方法:

a = b if b is not None else {}

答案 1 :(得分:2)

表达式b or {}只是一个简单的boolean OR expression。关于这一点的特殊之处在于,这个表达式不需要像其他语言一样返回每个定义的布尔值:

  

表达式x or y首先评估 x ;如果 x 为true,则返回其值;否则,将评估 y 并返回结果值。

     

(请注意,andor都不会限制它们返回FalseTrue的值和类型,而是返回最后一个已评估的参数。这有时很有用例如,如果s是一个应该被默认值替换的字符串,如果它是空的,则表达式s or 'foo'会产生所需的值。因为not必须发明一个值,它并不打算返回与其参数相同类型的值,因此,例如,not 'foo'会产生False,而不是''。)

答案 2 :(得分:1)

这不是一个特殊的构造,至少对我有点疲惫的眼睛。它说要分配

的结果
 (b or {}) 

到a。

因此,如果b为False值,则获取{}(空字典文字),否则获取b的值。

答案 3 :(得分:1)

答案 4 :(得分:1)

默认分配习惯