Python 有三元条件运算符吗?

发布于 2022-01-03 17:00:00

如果 Python 没有三元条件运算符,是否可以使用其他语言构造来模拟一个?

关注者
0
被浏览
103
1 个回答
  • 面试哥
    面试哥 2022-01-03
    为面试而生,有面试问题,就找面试哥。

    是的,它是在 2.5 版中添加的。表达式语法为:

    a if condition else b
    

    第一condition被评估,则恰好中的任一个ab进行评估并返回基于所述布尔condition。如果condition计算为True,则a计算并返回但b被忽略,否则 whenb计算并返回但a被忽略。

    这允许短路,因为conditiona评估when为真而b根本不评估,但conditionb评估when为假而a根本不评估。

    例如:

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

    请注意,条件是一个表达式,而不是一个语句。这意味着您不能在条件表达式中使用赋值语句pass或其他语句

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

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

    x = a if True else b
    

    将条件表达式视为在两个值之间切换。当您处于“一种价值或另一种价值”的情况下时,它非常有用,但它不会做太多其他事情。

    如果需要使用语句,则必须使用普通if 语句而不是条件表达式


    请记住,由于以下几个原因,一些 Pythonistas 不赞成它:

    • 参数的顺序condition ? a : b与许多其他语言(如 C、C++、Go、Perl、Ruby、Java、Javascript 等)的经典三元运算符的顺序不同,这可能会在不熟悉 Python 的人“令人惊讶的”行为使用它(他们可能会颠倒参数顺序)。
    • 有些人觉得它“笨拙”,因为它违背了正常的思维流(先考虑条件,然后考虑效果)。
    • 文体原因。(尽管 ‘inline if非常有用,并使您的脚本更简洁,但它确实使您的代码复杂化)

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看