【问题标题】:What is this called: myVar = value1 or value2这叫什么:myVar = value1 或 value2
【发布时间】:2013-03-07 10:50:42
【问题描述】:

我见过这种三元赋值,我想知道它是否有一个特定的名称:

value1 = None
value2 = 'real value'
myVar = value1 or value2

// at this point the value of myVar is 'real value'

【问题讨论】:

  • 我不知道这是“三元”赋值,而是“定义或”?
  • @squiguy,这在 Python 中真正称为三元赋值,因为在 Python 2.5 中添加 ... if ... else ... conditional expression 之前就是这样使用的。
  • @MarkRansom 啊,我更倾向于 Perl 并且用户更愿意看到 $var //= $other

标签: python ternary-operator


【解决方案1】:

文档称之为boolean operationvalue1 or value2 的值只是语言的一个特性。

在 C 和受 C 启发的语言中,有一个 ternary operator。这个操作符的效果最好称为“条件表达式”。 Python 也有条件表达式:

myVar = value1 if value1 else value2

在这种情况下,我更喜欢使用条件表达式而不是布尔运算符。 myVar = value1 or value2 的效果对于不熟悉 Python 的人来说并不明显。

【讨论】:

  • 在他的情况下也是None == False0nullvoid 也可能如此。
  • None != FalseNone != 0,至少在 Python 2.7 中。 bool(None) == False,想。 Python 中没有nullvoid
  • 如果您对此答案不满意,请考虑添加更好的答案或至少添加评论。
  • 值得注意的是,or 运算符与在 C 或 C++ 中的工作方式不同,因为它返回两个值之一,而不是布尔结果。
  • @Allendar:value2 是否被value1 or value2 表达式返回取决于value1 的“真实性”:bool(None) == bool(0) == bool(0.0) == bool([]) == bool('') == bool(False) == False == etc。见truth testing procedure
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 2020-01-17
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
相关资源
最近更新 更多