2010-06-22 29 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