2013-03-20 73 views
1

我似乎記得三元運算符存在的一個缺陷。例如:python中三元運算符的縮寫

a = None 
b = a if a else 'Not None!' 
# b is now 'Not None!' 

我以爲是這樣的

a else 'Not None!' 

,但不起作用。也許有另一種方式來使用其他內置類型來縮寫這個嗎?

+0

^這應該是很明顯的。作爲回答發佈? – astex 2013-03-20 21:40:22

+2

值得注意的是,在某些情況下(* else *的情況評估爲False)它們*不相同,並且如果這是您實際需要的可讀性,則應始終使用三元運算符。您主要在舊代碼中看到這一點,因爲三元運算符不在舊版本的Python中。縮短時間並不會讓它變得更好。 – 2013-03-20 21:40:45

+0

也許你是這麼想的:'cond and x or y' – jamylak 2013-03-20 21:42:25

回答

3

不,沒有縮寫可用。

是不是你在考慮a or 'Not None!'呢?

並作爲附註:... if ... else ...被稱爲conditional expression;它是a三元運算符,但SQL BETWEEN ... IN ...表達式也是如此。

1

是的,在你的情況下有一個縮寫。

b = a or 'Not None!' 

幾乎相當於

b = a if a else 'Not None!' 

唯一的區別是,a在第一情況下,在第二計算一次,兩次。放入b的值在任何情況下都是相同的。

另外,要知道在任一代碼中,如果a不是None,但仍然False-y,您可能會收到意想不到的結果。例如,考慮如果a0.0會發生什麼情況。

0

這並不是真正意義,我

a = None 
b = a if a else 'Not None!' 

你爲a任何虛假值設置b到Not None!(包括None

也許你在想

a = None 
b = 'Not None!' if a is None else a 

什麼?

總之,除了情況下,您可以用

b = a or 'Not None!' 

b = a and 'Not None!' 

脫身有沒有辦法避免提及a兩次