我似乎記得三元運算符存在的一個缺陷。例如:python中三元運算符的縮寫
a = None
b = a if a else 'Not None!'
# b is now 'Not None!'
我以爲是這樣的
a else 'Not None!'
,但不起作用。也許有另一種方式來使用其他內置類型來縮寫這個嗎?
我似乎記得三元運算符存在的一個缺陷。例如:python中三元運算符的縮寫
a = None
b = a if a else 'Not None!'
# b is now 'Not None!'
我以爲是這樣的
a else 'Not None!'
,但不起作用。也許有另一種方式來使用其他內置類型來縮寫這個嗎?
不,沒有縮寫可用。
是不是你在考慮a or 'Not None!'
呢?
並作爲附註:... if ... else ...
被稱爲conditional expression;它是a三元運算符,但SQL BETWEEN ... IN ...
表達式也是如此。
是的,在你的情況下有一個縮寫。
b = a or 'Not None!'
幾乎相當於
b = a if a else 'Not None!'
唯一的區別是,a
在第一情況下,在第二計算一次,兩次。放入b
的值在任何情況下都是相同的。
另外,要知道在任一代碼中,如果a
不是None,但仍然False-y,您可能會收到意想不到的結果。例如,考慮如果a
是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
兩次
^這應該是很明顯的。作爲回答發佈? – astex 2013-03-20 21:40:22
值得注意的是,在某些情況下(* else *的情況評估爲False)它們*不相同,並且如果這是您實際需要的可讀性,則應始終使用三元運算符。您主要在舊代碼中看到這一點,因爲三元運算符不在舊版本的Python中。縮短時間並不會讓它變得更好。 – 2013-03-20 21:40:45
也許你是這麼想的:'cond and x or y' – jamylak 2013-03-20 21:42:25