2016-08-19 115 views
-7

我已經在互聯網上搜索了爲什麼我應該使用return False/True直接返回,但找不到答案。返回True/False - 什麼時候使用它只是返回

爲什麼我想要聲明返回True/False inseatd的只是返回? 你能給我舉個例子嗎?

def test(var): 
    if var > 5: 
     return True 
    else: 
     return False 

test(8) 
>>> True 
#------------------------ 

def test(var): 
    if var > 5: 
     return 
    else: 
     return 

test(8) 
>>> None 
+5

呃,你會用它,如果你想讓你的函數返回True或False的值。你認爲你的第二個功能實際上在做什麼? –

+1

如果您打算髮布python代碼,請使用適當的縮進方式發佈它。嚴重縮進的Python代碼是無稽之談。 – khelwood

+7

歡迎來到Stack Overflow!這個問題可以用面值來回答,但我認爲這個問題揭示了一個理解上的巨大差距,即回答它並不能解決問題。我建議去像codecademy.com這樣的許多編程教程之一來學習編程的基礎知識。 – James

回答

1

一個主要的問題是你的第二個函數會返回None。返回一個布爾值是讓函數的返回值在別處有意義/有用的一種方法。

如果它返回象TrueFalse一個值,你可以依次使用函數的返回值類案件:

if test(8): 
    # do something it returns True 
else: 
    # do something otherwise 

否則,你的作用是毫無意義的,因爲test()將返回相同的事情,而不管的輸入。

我曾經被告知函數應該「做某事」或「返回某些東西」。您的第二個示例函數不會「做任何事情」,因爲如果您沒有根據比較的結果做出選擇,那麼>比較不起作用。它也不會真的返回任何東西(至少沒有任何意義),因爲無論如何,它將返回None - 實際上,即使您刪除return關鍵字,它仍將僅返回None

+1

謝謝你的評論 - 這是我想看到的 - 如何可以在其他地方使用True/False。也許這是非常低調的問題,但我剛剛開始。 – user6735313

+1

@ user6735313請閱讀關於函數的python教程,特別是關於如何使用函數值,您可以嘗試以下鏈接獲取一些信息:http://anh.cs.luc.edu/python/hands-on/3。1/handsonHtml/functions.html#returned-function-values – EdgeCaseBerg

+0

@ user6735313很樂意提供幫助。當我第一次開始編程時,在理解函數和返回值方面遇到了很多麻煩。現在看起來這麼簡單,我已經有了很多的經驗,但是不久之前,我忘記了做一個新手的感覺。除了評論中鏈接的教程之外,我還會推薦Codecademy的教程:https://www.codecademy.com/learn/python。如果你通過做得更好,我認爲它非常有用。 – elethan

1

比喻:一個函數是一個可複製的助手,準備好執行任務,並給你一個答案。該任務由函數的參數(括號內的內容)定義。讓我們重寫這些名字以賦予它們語義含義(即說明我們所期望的名稱)。

def isXGreaterThanY(..... 

這裏,任務的名稱是「是X大於Y?」。如果你找到你的可複製助理並詢問「X大於Y」,那麼助理將無法完成你想要的任務,除非你告訴他們X和Y是什麼。

def isXGreaterThanY(x, y): 
    ......... 

現在我可以開始解釋你可能會出錯的地方。在這種編程水平上的一個錯誤是,僅僅因爲你看到的東西幾乎可以滿足網頁上的任何需求,人們可能會試圖將其複製到語法上,並試圖擺脫語法的束縛,並希望它能夠正常工作。這將無法工作。這不是編程的要點。

一些常見的人認爲編程是關於解決你的問題的魔術詞(不是我暗示你認爲的那樣)。不是這種情況。相反,編程是(經典的)能夠讓自動機(這些小助手)爲你操縱信息。對信息的機械操縱是計算機擅長的。我們希望我們的任務可以被複制,所以我們給它們起名爲「比X大Y」,並且將它們指定爲程序(也被稱爲函數)。

讓我們看看你寫的:

def isXGreaterThanY(x, y): 
    if x > y: 
     return True 
    else: 
     return False 

的過程是所有關於控制流動。程序的每個部分是陳述表達式(您可以在此級別考慮爲相同的事情)。一個程序通常有一個答案:每當控制流擊中一個「return ANSWER」語句,整個程序就會停止(任務完成),你的神奇助手回覆你,並在上面寫上ANSWER的一張紙上的答案。一個返回答案的過程被稱爲「函數」,這幾乎總是我們想要的(程序在後臺做醜陋的「副作用」通常不是我們想要的)。

下面,我將說明從語法(我們寫下的內容)到機械操作的想法。一個程序是由語法表達,並且每個表達式可以有子表達式等

  • 我們有if __ then __ else __聲明,其中包含三個子表達式:
    • x > y查詢條款,其中包括:作用於
      • _ > _操作者:
        • 變量x
        • 變量y
    • 「則」 的return True子句,它由:
      • return語句,返回:
        • 字面布爾值True
    • return False的 「其他」 的條款,其中包括:
      • return語句,返回:
        • 字面布爾值False

這個'語法樹'是電腦看到什麼。現在,編程語言將含義與這些表達式聯繫起來:它知道如何在所謂的「控制流」中導航該樹。特別是在編程語言Python中,我們知道當我們看到一個if-then-else語句時,首先我們檢查測試條件。在這種情況下,我們看看測試條件,並注意它是一個裸體比較(我們問CPU,它給出了True或False)。如果比較是真的,我們將執行返回的「then」子句;即遞給你一張答案爲True的紙條。如果比較結果不真實,我們會做「其他」條款,並給你一張紙條,上面寫着答案False

這樣,每當你問你的助手「是X大於Y?其中X = ...和Y = ...「,助理將(實際上)查看您在過程中指定的說明,並將助理的眼睛一次固定在一個表情上進行解釋(」控制流程「可以被認爲是突出顯示或者加下劃線的'主動'子表達式,也就是說,控制流是你的助理眼睛在查看代碼時所需要的路徑)在這種特殊情況下,你的過程從一個if-then-else子句開始,它被解釋爲一個分支點控制流程(在路上叉);它採取適當的分支,在這種情況下,將發現兩個「返回」語句中的一個,然後盡職地給你一張紙。通過特殊控制流語句後面的語義(含義),如if-then-else。其他控制流結構的解釋不同。for x in range(7): ...會假裝x是1,執行...,假裝x是2,並執行...

while True: ...將循環永遠,一遍遍執行...

A break(break out)表示「停止while循環」或「提前停止for循環」。

A continue的意思是「在while/for循環中跳過...的其餘部分,但保持循環」。

您可以使用上述和您自己的自定義函數(稱爲遞歸)(此答案範圍之外的另一個主題)來實現您自己的控制流。

這就是控制流和命令式編程。


順便說一句,這是更好的形式來做到這一點:

def isXGreaterThanY(x, y): 
    # this is a comment 
    # you can insert a print x>y here, or print(x>y) depending on your version of python 
    return (x > y) 

之前它送入的if-then-else語句表達x > y計算結果爲真/假。所以,你可以返回表達式作爲答案。但是,到那時候,你的函數很簡單,你不會寫一個函數的答案:

#print isXGreaterThanY(1,3) 
print (1 > 3) 
相關問題