回答

收藏

Python 有三元条件运算符吗?

技术问答 技术问答 363 人阅读 | 0 人回复 | 2023-09-11

如果 Python 可以用其他语言结构模拟一个没有三元条件的操作符吗?
; t+ b9 ^7 Y6 ~* b  g0 ]4 ^4 P- b# o' ~                                                                8 ^6 |$ L' H3 f; S+ ?& @
    解决方案:                                                               
0 N6 M( n( L% l2 f* F" Y- U                                                                是的,它在 2.添加 版中添加。表达式语法如下:; {. H, r, w3 y1 N# ?: J
    a if condition else b. t! C. L  F. \2 z
第一condition被评估,恰好是任何一个a或b基于布尔值进行评估并返回condition。如果condition计算为True,则a计算并返回但b被忽视,否则 whenb计算并返回但a被忽略。
5 \) v: b3 a9 q9 L# F因为condition仅a评估when为真而b但是condition仅b评估when为假而a根本没有评估。
  A7 G* d  E: t1 a8 U例如:  l1 Y! o* i& g3 \% Q
    >>> 'true' if True else 'false''true'>>> 'true' if False else 'false''false'5 }; B. O0 j+ S4 _3 F# w6 S! w
请注意,条件是一个表达式,而不是一个语句。这意味着你不能有条件表达式中使用赋值语句pass或其他语句" H& F) j/ k$ O* o! `2 ?3 j
    >>> pass if False else x = 3  File "",line 1    pass if False else x =  3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ^SyntaxError: invalid syntax
    . s3 w0 S- z8 E5 K9 P9 O; e
但是,您可以使用条件表达式来分配变量,如下所示:
. F3 N0 D" K+ J' w
    x = a if True else b
    ; O4 G0 c3 ~  _1 A
将条件表达式视为两个值之间的切换。当你处于一种价值或另一种价值时,它是非常有用的,但它不会做太多其他事情。
- b" b# E* i: y, w* ]) X7 S若需使用语句,则必须使用普通语句if 语句而不是条件表达式# J4 \' l7 ?  O
请记住,由于以下原因,一些 Pythonistas 不赞成它! N2 N! w  Q8 q5 T. j
参数的顺序condition ? a : b与许多其他语言(如 C、C  、Go、Perl、Ruby、Java、Javascript 等)经典三元运算符的顺序不同,可能不熟悉 Python 使用它的人惊人行为(他们可能会颠倒参数顺序)。
1 v# r5 s& q: e7 M6 \5 G/ n0 K有些人认为它笨拙,因为它违反了正常的思维流(先考虑条件,再考虑效果)。; H9 ~7 Q- m$ B$ `& r" h3 b
(尽管 ‘inline if‘非常它有用,使你的脚本更简洁,但它确实使你的代码复杂)
如果你在记住顺序时遇到问题,请记住,当你大声朗读时,你(几乎)说出了你的意思。x = 4 if b > 8 else 9朗读为x will be 4 if b is greater than 8 otherwise 9。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则