在python中:
>>> a = b or {}
答案 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 并返回结果值。(请注意,
and
和or
都不会限制它们返回False
和True
的值和类型,而是返回最后一个已评估的参数。这有时很有用例如,如果s
是一个应该被默认值替换的字符串,如果它是空的,则表达式s or 'foo'
会产生所需的值。因为not
必须发明一个值,它并不打算返回与其参数相同类型的值,因此,例如,not 'foo'
会产生False
,而不是''
。)
答案 2 :(得分:1)
这不是一个特殊的构造,至少对我有点疲惫的眼睛。它说要分配
的结果 (b or {})
到a。
因此,如果b为False值,则获取{}(空字典文字),否则获取b的值。
答案 3 :(得分:1)
答案 4 :(得分:1)
默认分配习惯