2010-06-22 27 views
67

C和许多其他语言都有一个conditional (aka ternary)操作员。这使您可以根据条件的真实性在两个值之间做出非常简洁的选择,这使得表达式(包括分配)非常简洁。python? (条件/三元)操作员

我想这是因为我发现我的代码有很多是需要在Python四行有条件分配的:

if condition: 
    var = something 
else: 
    var = something_else 

而在C中,它会是:

var = condition? something: something_else; 

一次或两次在一个文件中是好的,但是如果你有很多条件赋值,那么线条的数量会爆炸,最糟糕的是,眼睛会被吸引到它们。

我喜欢条件运算符的简洁性,因为它使我认为不具战略性的东西在跳过代码时分散注意力。

那么,在Python中,是否有任何技巧可以用来将赋值指派到单行上,以近似我描述的条件运算符的优点?

回答

128

Python有这样的操作:

variable = something if condition else something_else 

另外,虽然不建议(见@ karadoc的评论):

variable = (condition and something) or something_else 
+8

“变量=条件和东西或something_else”甚至不工作。 例如,“True and False or True”返回True,而“True False:True”返回False。 – karadoc 2012-05-17 10:27:09

+0

Something or Something_else正常吗?例如,如果某件事是空的,你会把它设置为something_else? – Breedly 2013-05-14 13:01:41

12

在老的Python代码,您可能会看到的伎俩:

condition and something or something_else 

但是,这已被优越的所取代构造:

something if condition else something_else 
+0

为什么不“返回,如果不是什么”的工作,但? – Will 2010-06-22 08:21:58

+4

@Will:因为“如果没有返回任何东西”在句法上不正确Python? – 2010-06-22 08:36:00

+0

@ Will可能因为你没有提供'else'部分? – glglgl 2014-07-29 19:07:16