Python有三元条件运算符吗?

56 浏览
0 Comments

Python有三元条件运算符吗?

这里有一个关于 Python 的三元条件运算符吗?

想改进这篇文章吗?请提供详细的回答,包括引用和解释您的答案为什么是正确的。缺乏足够细节的答案可能会被编辑或删除。

admin 更改状态以发布 2023年5月22日
0
0 Comments

你可以对元组进行索引:

(falseValue, trueValue)[test]

test 需要返回 True 或 False。
始终将其实现为以下方式可能更安全:

(falseValue, trueValue)[test == True]

或者你可以使用内置的bool()函数来确保得到一个布尔值

(falseValue, trueValue)[bool()]

0
0 Comments

是的,条件表达式在Python版本2.5中被添加了。表达式的语法是:

a if condition else b

首先评估condition,然后根据condition布尔值精确地评估并返回ab中的一个。如果condition评估为True,那么a将被评估和返回,而b将被忽略,否则当b被评估和返回时,a将被忽略。

这样可以进行短路操作,因为当condition为真时,只有a会被评估,b根本不会被评估,但当condition为假时,只有b会被评估,a根本不会被评估。

例如:

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

请注意条件语句是一个表达式,不是语句。这意味着你不能在条件表达式中使用 语句,例如 pass 或带有 = 的赋值语句(或类似 += 的 "augmented" 赋值语句):

>>> pass if False else pass
  File "", 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 "", line 1
SyntaxError: cannot assign to conditional expression
>>> # If we parenthesize it instead...
>>> (x = 1) if False else (y = 2)
  File "", 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 程序员不太喜欢条件表达式:

  • 与其他许多语言(如CC++GoPerlRubyJavaJavaScript 等)的经典条件运算符condition ? a : b不同,它的参数顺序不同,这可能导致不熟悉 Python 的“意外”行为的人使用时出现错误(他们可能会反转参数顺序)。
  • 有些人觉得它“笨拙”,因为它与正常的思维流程相反(先考虑条件,然后考虑影响)。
  • 风格原因。(尽管“内联if”非常有用,可以使您的脚本更加简洁,但确实会使代码更加复杂)

如果您忘记了顺序,可以记住,当大声读出来时,您(几乎)说出自己的意思。例如,x = 4 if b > 8 else 9 大声读出来是 x 将为 4 如果 b 大于 8 否则为 9

官方文档:

0