python - Python 有三元条件运算符吗?

标签 python operators conditional-operator

<分区>

有没有ternary conditional operator在 Python 中?

最佳答案

是的,是added在 2.5 版中。表达式语法为:

a if condition else b

首先评估条件,然后根据Boolean 评估并返回ab 中的一个。 条件的值。如果 condition 评估为 True,则评估并返回 a 但忽略 b,否则当 b 被评估并返回,但 a 被忽略。

这允许短路,因为当 condition 为真时,只有 a 被评估而 b 根本不被评估,但是当 condition 为 false 只有 b 被评估而 a 根本不被评估。

例如:

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

请注意,条件是一个表达式,而不是一个语句。这意味着您不能使用语句,例如pass,或带有= 的赋值(或“增强型”赋值,例如+=), 在条件表达式中:

>>> pass if False else pass
  File "<stdin>", line 1
    pass if False else pass
         ^
SyntaxError: invalid syntax

>>> # Python parses this as `x = (1 if False else y) = 2`
>>> # The `(1 if False else x)` part is actually valid, but
>>> # it can't be on the left-hand side of `=`.
>>> x = 1 if False else y = 2
  File "<stdin>", line 1
SyntaxError: cannot assign to conditional expression

>>> # If we parenthesize it instead...
>>> (x = 1) if False else (y = 2)
  File "<stdin>", line 1
    (x = 1) if False else (y = 2)
       ^
SyntaxError: invalid syntax

(在 3.8 及更高版本中,:=“walrus”运算符允许简单地赋值作为表达式,然后与此语法兼容。但请不要'这样写代码;很快就会变得很难理解。)

同样,因为是表达式,else部分必填:

# Invalid syntax: we didn't specify what the value should be if the 
# condition isn't met. It doesn't matter if we can verify that
# ahead of time.
a if True

但是,您可以使用条件表达式来分配变量,如下所示:

x = a if True else b

或者例如返回一个值:

# Of course we should just use the standard library `max`;
# this is just for demonstration purposes.
def my_max(a, b):
    return a if a > b else b

将条件表达式视为在两个值之间切换。我们可以在处于“一个值或另一个”的情况下使用它,在这种情况下,我们将对结果做同样的事情,而不管条件是否满足。我们使用表达式来计算值,然后用它做一些事情。如果您需要根据条件做一些不同的事情,请改用普通的 if 语句


请记住,出于以下几个原因,一些 Pythonista 不喜欢它:

  • 参数的顺序与经典条件的顺序不同? a : b 来自许多其他语言的三元运算符(例如 CC++GoPerlRubyJavaJavaScript 等),这可能当不熟悉 Python 的“令人惊讶”行为的人使用它时会导致错误(他们可能会颠倒参数顺序)。
  • 有些人认为它“笨拙”,因为它违背了正常的思维流程(首先考虑条件,然后考虑影响)。
  • 文体原因。 (虽然“内联 if”可能真的有用,并使您的脚本更简洁,但它确实会使您的代码复杂化)

如果您记不住顺序,请记住,在大声朗读时,您(几乎)说出了您的意思。例如,x = 4 if b > 8 else 9 被大声朗读为 x will be 4 if b is greater than 8 otherwise 9

官方文档:

关于python - Python 有三元条件运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34256449/

相关文章:

python - Pandas Group 除以 Max

python - 如何使用python将图像中方形标题的背景从黑色反转为白色?

python - 单个 msi、exe 或 Egg 中的多个 python 包

c++ - 三元运算符不适用于 lambda 函数

java - 为什么 Java 没有条件与和条件或运算符的复合赋值版本? (&&=, ||=)

python - 自定义权限返回始终为 true,django

c++ - 初始化器列表和运算符的 RHS

c# - C# 中运算符方法的方法名称

javascript - 为什么这些链式速记运算符不起作用?

c# - 带文字数字的条件运算符返回类型