2010-11-25 17 views
3

我發現我這個重複了很多:表達此的更簡短的方法? C = A,如果A否則乙

val = x if x else y 

有時x去了好幾層深成一個類或字典,以便它會非常長:

val = obj.elements[0].something if obj.elements[0].something else y 

它看起來醜陋,迫使我打出更多。任何已知的方法來縮短這個?也許像這樣的內建者存在?

val = first_try(x, y) 

我想我可以很容易地寫我自己的,但希望的是建於

first_try = lambda x,y: x if x else y 

回答

16

or操作符返回轉換爲真正的第一個參數:

val = x or y 

如:

>>> None or 'OK' 
'OK' 
+0

這是完美的! – Tony 2010-11-25 01:27:06

+0

你可以繼續鏈接它們! a或b或c或d – Tony 2010-11-25 01:29:05

+0

@Tony:是的。請注意,這只是一個令人意外的事故,而不是設計。 `a或b或c`等同於`(a或b)或c`。 – 2010-11-25 02:03:41

1

這對我來說似乎是一個嘗試使代碼有點簡潔的情況。我可能會做這樣的事情:

x = a.b.c.d[0] 
val = x if x else y 

一個額外的行,和一個很少一次消化。

0

使用getattr和可選的default參數。在你上面的長示例中,這將是:

val = getattr(obj.elements[0], 'something', y) 
相關問題