如果 Python 可以用其他语言结构模拟一个没有三元条件的操作符吗?& w( [, F* Q& e
7 V+ I k/ q1 \% B9 j解决方案: K' s' v" M- g: y5 `) \2 t4 p 是的,它在 2.添加 版中添加。表达式语法如下:2 Z7 ^# e- ^7 N7 a) J1 b4 y
a if condition else b5 d8 b# N2 h, a$ h
第一condition被评估,恰好是任何一个a或b基于布尔值进行评估并返回condition。如果condition计算为True,则a计算并返回但b被忽视,否则 whenb计算并返回但a被忽略。( ~( A. H1 |/ y0 [" a
因为condition仅a评估when为真而b但是condition仅b评估when为假而a根本没有评估。 9 n l5 S( R; q例如: & m+ d: t" A Q" h8 x
>>> 'true' if True else 'false''true'>>> 'true' if False else 'false''false'! h1 m* A( P5 S& ?
请注意,条件是一个表达式,而不是一个语句。这意味着你不能有条件表达式中使用赋值语句pass或其他语句:( z' n8 _* c% W& {; X
>>> pass if False else x = 3 File "",line 1 pass if False else x = 3 ^SyntaxError: invalid syntax- x+ n# b$ g$ l* \* J# _. e8 S. U9 Q" z c
但是,您可以使用条件表达式来分配变量,如下所示:4 i$ _8 {6 s: }, p2 Y
x = a if True else b6 R7 P% W4 J5 h& v4 F
将条件表达式视为两个值之间的切换。当你处于一种价值或另一种价值时,它是非常有用的,但它不会做太多其他事情。 ( Z9 z' O1 r0 \: S+ O# K9 ~) |若需使用语句,则必须使用普通语句if 语句而不是条件表达式。 1 e7 Q# ?0 n9 ~4 I) I& w0 U请记住,由于以下原因,一些 Pythonistas 不赞成它) k( V' V: L, x 参数的顺序condition ? a : b与许多其他语言(如 C、C 、Go、Perl、Ruby、Java、Javascript 等)经典三元运算符的顺序不同,可能不熟悉 Python 使用它的人惊人行为(他们可能会颠倒参数顺序)。 ( U3 c- E6 X. I1 `有些人认为它笨拙,因为它违反了正常的思维流(先考虑条件,再考虑效果)。 9 p0 b1 [6 N% @- F(尽管 ‘inline if‘非常它有用,使你的脚本更简洁,但它确实使你的代码复杂)如果你在记住顺序时遇到问题,请记住,当你大声朗读时,你(几乎)说出了你的意思。x = 4 if b > 8 else 9朗读为x will be 4 if b is greater than 8 otherwise 9。