比喻:一個函數是一個可複製的助手,準備好執行任務,並給你一個答案。該任務由函數的參數(括號內的內容)定義。讓我們重寫這些名字以賦予它們語義含義(即說明我們所期望的名稱)。
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
查詢條款,其中包括:作用於
- 「則」 的
return True
子句,它由:
- 的
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)
呃,你會用它,如果你想讓你的函數返回True或False的值。你認爲你的第二個功能實際上在做什麼? –
如果您打算髮布python代碼,請使用適當的縮進方式發佈它。嚴重縮進的Python代碼是無稽之談。 – khelwood
歡迎來到Stack Overflow!這個問題可以用面值來回答,但我認爲這個問題揭示了一個理解上的巨大差距,即回答它並不能解決問題。我建議去像codecademy.com這樣的許多編程教程之一來學習編程的基礎知識。 – James