2011-12-27 74 views

回答

2

有沒有錯,你的代碼,但如果檢查任何的abc是昂貴的,你可以使用一個標誌,而不是作爲檢查的條件只有一次:

flag = False 
if a: 
    flag = True 
    do x 
if b: 
    flag = True 
    do y 
if c: 
    flag = True 
    do z 
do (p if flag else q) 

我覺得這形式也更易讀,因爲它只有縮進一個水平上,但我想這只是喜好的問題...


編輯:如果p必須執行之前xyz,那麼你可以存儲條件的結果檢查來代替:

doers = [x, y, z] 
conditions = [check(el) for el in (a, b, c)] 
do (p if any(conditions) else q) 
tmp = [doers[i] for i, condition in enumerate(conditions) if condition] 

(與tmp線將是一個真正的for循環更Python,但我明白,你正在優化性能,列表理解更快......)

+0

+1,這很好,但是如果'p'需要在'x'等之前完成呢? – mtrw 2011-12-27 02:30:55

+0

@mtrw - 我在編輯,而你評論! :) – mac 2011-12-27 02:37:31