2016-11-08 71 views
3

我是一名初學Python程序員,我想知道最佳做法是什麼函數返回。我有很多條件,但只要其中一個是真的,我想殺死函數並返回一個bool值。 說,我們有:Python中的多個返回值與返回變量

a) 
def foo(): 
    if condition1: 
     return True 
    if condition2: 
     return True 
    if condition3: 
     return True 
    return False 

b) 
def foo(): 
    bar = False 
    if condition1: 
     bar = True 
    elif condition2: 
     bar = True 
    elif condition3: 
     bar = True 
    return bar 

是一種方法比另一種更好?爲什麼?或者這是一些完全垃圾,應該以完全不同的方式實施?其他語言與Python不同(或者,是否存在「pythonic」方式)? 謝謝大家提前回答。 順便說一句,有最佳實踐的標籤,或類似的東西?

+2

我懷疑這是特定於Python的,而且有很多找到「早日迴歸」搜索時。這也是非常具體的情況,比如早期收益有多清楚或如何隱藏。並且,就你的情況而言:'如果condition1或condition2或condition3:返回True;返回False「可能更清晰。 – Evert

+1

兩者都很好。你應該使用你的案例更可讀的。 – zvone

+0

對於較長的函數,使用單一返回可以更容易閱讀。但是,無論如何,打破這些更長的功能是一個好主意。 –

回答

5

第一個版本是更Python在我看來,它可以被寫成這樣,雖然:

return condition1 or condition2 or condition3 
+2

如果任何條件都不是'bool',那麼最好使用'return bool(condition1或condition2或condition3)'結果。 –

+2

@MarkRansom'return any((condition1,condition2,condition3))' –

+0

在這種情況下,condition1會檢查。如果屬實,它會馬上返回True,還是其他條件需要檢查?我相信C有類似快速評估的東西,我們在這裏有嗎? –

2

a.)b.)都是有效的。對於像C這樣的資源管理的語言,或者只想在一個地方打破調試的語言,首選項爲b.)。請參閱https://softwareengineering.stackexchange.com/questions/118703/where-did-the-notion-of-one-return-only-come-from。 對於Python和其他語言,使用它們也是標準的。見Should a function have only one return statement?

+0

你能否詳細說明這一點;有沒有辦法看到這個?它在'return'處返回,我怎麼看到'if/elif' case引起'bar = True'? – roganjosh

+3

@roganjosh它不會告訴你哪個條件是真的。但是,如果您想在函數返回之前設置斷點或添加打印語句,則只需將它放在一個位置即可。 – Barmar

+0

@Barmar其實我明白這一點。公平,謝謝。 – roganjosh

2

你不使用「欄」變量,你不需要創建它。

其他方式:

def f(): 
    return condition1 or condition2 or condition3 

def f2(): 
    return any([condition1, condition2, condition3])