Python是否有三元条件运算符?

如果Python没有三元条件运算符,是否可以使用其他语言结构来模拟呢?

评论

  1. 在上面注释中引用的Python 3.0官方文档中,这被称为“conditional_expressions”,并且被非常隐藏地定义。这个文档甚至不包括术语“三元”,所以你很难通过谷歌找到它,除非你确切地知道要找什么。在第2版文档是较为有益的,包括一个链接到“PEP 308”,其中包括了很多与此相关的问题,有趣的历史背景。
  2. “三元”(有三个输入)是这种推理的重要属性,而不是这个概念的定义性质。例如:SQL有case [...] { when ... then ...} [ else ... ] end类似的效果,但根本不是三元的。
  3. 也ISO / IEC 9899(C编程语言标准)部分6.5.15称它为“有条件的运营商”
  4. 维基百科在文章“ ?: ”中对此进行了全面的介绍。
  5. 你想比较一些其他语言与python三元运算符?

答案


是的,它是在2.5版本中添加的
语法是:

a if condition else b

首先condition评估,然后基于布尔值返回a或者b返回 If 评估为True返回,否则返回。condition
condition ab

例如:

>>> 'true' if True else 'false'
'true'
>>> 'true' if False else 'false'
'false'

请记住,这是由一些Pythonistas皱起了几个原因:

  • 参数的顺序与许多其他语言(如C,Ruby,Java等)不同,当不熟悉Python的“令人惊讶的”行为的人使用它时(可能会颠倒顺序),这可能会导致错误。
  • 有些人觉得这是“笨拙的”,因为它违背了正常的思想流动(首先考虑条件,然后考虑效果)。
  • 文体的原因。

如果您在记忆顺序方面遇到困难,请记住,如果您大声朗读,几乎可以说出您的意思。例如,x = 4 if b > 8 else 9被朗读为x will be 4 if b is greater than 8 otherwise 9

官方文件:

  1. 对于编码人员来说,这个顺序可能看起来很奇怪,但f(x) = |x| = x if x > 0 else -x对数学家来说听起来很自然。你也可以像大多数情况下一样了解它,除了当C,那么你应该做B而不是.
  2. 使用此操作时要小心操作顺序。例如,线路z = 3 + x if x < y else y。如果x=2y=1,你可能期望得到4,但它实际上会产生1. z = 3 + (x if x > y else y)是正确的用法。
  3. 问题的关键是,如果你想在条件评估之后执行额外的评估,比如给结果添加一个值,你需要将附加表达式添加到双方(z = 3 + x if x < y else 3 + y),或者将条件(z = 3 + (x if x < y else y)z = (x if x < y else y) + 3
  4. @Pred在Python 2中失败,from __future__ import print_function因为print是一个语句,而不是一个函数。
  5. @Pred尝试print("OK" if status else "NOT OK")

您可以索引到一个元组:

(falseValue, trueValue)[test]

test需要返回TrueFalse
始终将其实施为:

(falseValue, trueValue)[test == True]

或者您可以使用内置的bool()来确保一个布尔值:

(falseValue, trueValue)[bool(<expression>)]

添加评论

友情链接:蝴蝶教程