如果Python没有三元条件运算符,是否可以使用其他语言结构模拟一个?
解决方法:
是的,2.5版本是added.表达式语法是:
a if condition else b
评估第一个条件,然后根据条件的Boolean值评估和返回a或b中的一个.如果condition的计算结果为True,则会计算并返回a但忽略b,否则当b被计算并返回但忽略a时.
这允许短路,因为当条件为真时,仅评估a并且根本不评估b,但是当条件为假时,仅评估b并且根本不评估a.
例如:
>>> 'true' if True else 'false'
'true'
>>> 'true' if False else 'false'
'false'
请注意,条件语句是表达式,而不是语句.这意味着您不能在条件表达式中使用赋值语句或传递或其他语句:
>>> 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语句而不是条件表达式.
请记住,由于以下几个原因,一些Pythonist对此不满意:
>参数的顺序与经典条件的顺序不同? a:b来自许多其他语言的三元运算符(例如C,C,Go,Perl,Ruby,Java,Javascript等),当不熟悉Python的“惊人”行为的人使用它时可能会导致错误(它们可能会反转)参数顺序).
>有些人发现它“笨拙”,因为它与正常的思维流程相反(首先考虑条件然后考虑影响).
>文体原因. (虽然’inline if’可能非常有用,并且使您的脚本更简洁,但它确实会使您的代码变得复杂)
如果您在记住订单时遇到问题,请记住,当您大声朗读时,您(几乎)会说出您的意思.例如,如果b> 1,则x = 4. 8大声朗读9,如果b大于8则x将为4,否则为9.
官方文件:
> Conditional expressions
> Is there an equivalent of C’s ”?:” ternary operator?