2014-10-06 52 views
2

我有,在功能,很多連續的語句如下所示:If/yield cascade - 如何更簡潔?

if condition1: 
    yield x 
else: 
    yield None 

if condition2: 
    yield y 
else: 
    yield None 

... 

有沒有一種方法,使更簡潔這種代碼?

+0

'yield x if condition1 else None'? – dano 2014-10-06 19:33:12

+0

你能舉一個你有什麼樣的條件的例子嗎?否則,我所能想到的只是將它作爲一行: 'yield x if condition1 else None' – MrHug 2014-10-06 19:33:43

+0

刪除了switch-statement標記,因爲Python沒有switch語句,我無法想象你會如何期待如果有的話,你可以幫助你。 – abarnert 2014-10-06 19:43:38

回答

4

使用conditional expressions將使其更簡潔:

yield x if condition1 else None 
yield y if condition2 else None 

或者,如果你有很多(值,條件)對,不介意評估前面的所有條件:

for val, cond in [(x, condition1), (y, condition2)]:yield val if cond else None

注意:第二部分回答由於com中給出的原因在下面。

+2

或'從(價值,如果條件其他沒有價值,條件在等等)'的收益。 – abarnert 2014-10-06 19:43:05

+2

第二個例子類型擊敗了發電機的一點,因爲在發電機能夠產生其第一個值之前必須評估所有條件和值。同一個班輪的一樣。 – Dunes 2014-10-06 19:45:31

+1

在第二個例子中,在評估組成列表的單個陳述的條件時,當然存在將重大負載轉移的危險,而不是在收益之間分配負載。當然,只有OP可以知道這是否是個問題。 – deets 2014-10-06 19:50:35