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

标签 python operators conditional-operator

有没有ternary conditional operator在 Python 中?

最佳答案

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

a if condition else b

首先评估 condition,然后根据 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'

请注意,条件是表达式,而不是语句。这意味着您不能使用 statements,如 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 语句


请记住,一些 Python 爱好者不赞成它有几个原因:

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

如果您无法记住顺序,请记住,当您大声朗读时,您(几乎)说出了您的意思。例如,x = 4 if b > 8 else 9 被大声读出,因为 x 将是 4 如果 b 大于 8 否则为 9

官方文档:

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

相关文章:

sql - Oracle 中的 if(condition, then, else)

java - 在地址簿中添加和检查 Java 中的条目

python - 优于 LeetCode 的 'climbing stairs' pr*blem 的深度优先搜索解决方案

python - 为什么我们在django的model_name.object.get_or_create()中的get_or_create之后写[0]

python - python 中的列表排列

c++ - 运算符->有什么特别之处以及它是如何工作的?

c++ - 对运算符<< 的 undefined reference

python - 同一 Matplotlib 标签中的多种字体大小

ios - 对成员 '==' 的模糊引用

c++ - 试图避免 for 循环内的 if-else 语句,但代码似乎有一些错误