2014-10-26 45 views
-1

我想創建一個函數來檢查一個值是否有效。這個函數將被放入另一個函數中,以檢查函數的其餘部分是否應該繼續。我的想法基本上是這樣的:如何防止函數在Python中的返回語句後繼續

def test(value): 
    if value == 5: 
     return "Don't Continue" 

def go(number): 
    test(number) 
    print('Here') 
    return 'Yes' 
    print('Now here') 

go(5) # Returns "Don't Continue", 'Here' 

爲什麼沒有功能退出時test函數返回一個值,並且,有沒有辦法不用多如果,否則情況來創建此類型的測試執行?

+1

你不測試從'test'返回值;你並不總是從'test'返回一個值。您可能會爲該函數創建一個更好的名稱,例如'is_expected_value()'。然後你可以讓它返回一個布爾值:True或False(而不是一個字符串,或者最好是None)。 – 2014-10-26 21:46:23

+0

對,我希望該功能在測試失敗時繼續(即不返回)。 – Startec 2014-10-26 21:47:14

回答

2

爲什麼沒有功能退出當測試函數返回 值

由於return語句只適用於它在功能,而不是調用該函數的函數執行。

你想是這樣的

def test(value): 
    if value == 5: 
     return False 
    return True 
    # these 3 lines can be shortened to: return value == 5 

def go(number): 
    if test(number): # test(value) returned True 
     print('Test succeeded') 
     return 
    print('Test failed') 

go(5) # will print 'Test failed' 

有沒有辦法不用多如果, 其他情況來創建此類型的測試?

如果你的意思是要檢查多個值,你可以做這樣的

def test(value): 
    # will return False if value is either 3 5 or 7 
    if value in [3, 5, 7]: 
     return False 
    return True 

的邏輯是有點過,但。如果測試通過,則返回True,否則返回False。

0

return表示從當前函數返回。所以調用另一個返回的方法不會從調用它的方法返回。

您可能會在test方法中引發異常。那會停止執行。

或者你可以改變go有:

if test(number): 
    return 

所以它會根據呼叫test的結果中止方法。

1

這裏有一個方法,你可以去,如果你的程序可能需要多條航線,並且要避免許多if聲明:

def test(value): 
    return value == 5 


def passed(): 
    return 'Passed' 


def failed(): 
    return 'Failed' 


def router(value): 
    routes = { 
     True: passed, 
     False: failed, 
    } 
    result = test(value) 
    return routes[result] 


def main(value): 
    route = router(value) 
    return route() 


if __name__ == '__main__': 
    print(main(5)) 
    print(main(4)) 
+0

如果我沒有錯,它應該是'返回路線'而不是'def main(value)'下的'return route()'。 – Ejaz 2014-10-26 22:11:21

+0

@PEJK在這種情況下沒有,因爲'路由器'返回一個函數,我想調用它,所以我使用'()' – aseeon 2014-10-26 22:31:34