Python 函式的基本概念

已完成

當您了解 Python 的程式設計基本概念之後,下一個步驟就是函式。 函式的最簡單形式是,包含一律會傳回一或多個值的程式碼。 在某些情況下,函式也會有選擇性或必要的輸入。

當您開始撰寫程式碼以重複使用該程式的其他組件時,這就是將程式碼擷取出來成為函式的絕佳契機。 儘管透過函式共用通用程式碼很實用,但您也可以透過將組件擷取出來成為較小型 (更可讀取) 的函式來限制程式碼的大小。

讓透過使用較小型函式來避免重複使用及防止使用大型函式的程式更容易閱讀且維護。 當功能未正常運作時,也更易於進行偵錯。

有數個關於函式輸入的規則,對於充分利用函式必須提供的一切至關重要。

重要

雖然我們使用「輸入」一詞來描述函式採用的內容,但這些元素通常稱為「引數」或「參數」。 為了在此課程模組中維持一致,我們將輸入稱為「引數」

沒有引數的函式

若要建立函式,您可以使用 def 關鍵字後面接著名稱、括弧,然後是含有函式程式碼的主體:

def rocket_parts():
    print("payload, propellant, structure")

在此案例中,rocket_parts 是函式的名稱。 該名稱後面接著空括弧,表示不需任何引數。 最後是程式碼,以四個空格縮排。 若要使用此函式,您必須使用括弧,依其名稱呼叫它:

rocket_parts()
payload, propellant, structure

rocket_parts() 函式不會接受任何引數,且會列印一則陳述式。 如果您需要使用函式傳回的值,即可將函式輸出指派給變數:

output = rocket_parts()
payload, propellant, structure
output is None
True

output 變數的值是 None 似乎很奇怪。 這是因為 rocket_parts() 函式並未明確傳回值。 在 Python 中,如果函式未明確傳回值,則會「隱含地」傳回 None。 更新函式以傳回字串 (而不是列印它),會導致 output 變數具有不同的值:

def rocket_parts():
    return "payload, propellant, structure"
output = rocket_parts()
output
payload, propellant, structure

如果您需要使用函式的值,該函式「必須」明確傳回。 否則會傳回 None

注意

您不需要一律指派函式傳回。 在大多數函式未明確傳回一或多個值的情況下,這表示您不需要指派或使用傳回的隱含 None

必要和選擇性引數

在 Python 中,有數個內建函式需要引數。 某些內建函式讓引數成為選擇性。 內建函式為立即可用,因此您不需要明確地匯入它們。

需要引數的內建函式範例為 any()。 此函式採用可反覆運算的項目 (例如,清單),並在可反覆運算項目中有任何項目為 True 時傳回 True。 否則會傳回 False

any([True, False, False])
True
any([False, False, False])
False

如果您在不含任何引數的情況下呼叫 any(),即會引發一個有用的例外狀況。 此錯誤訊息說明您至少需要一個引數:

 any()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: any() takes exactly one argument (0 given)

您可以使用另一個名為 str() 的內建函式,來確認某些函式允許使用選擇性引數。 此函式會從引數建立字串。 如果未傳入任何引數,即會傳回空字串:

str()
''
str(15)
'15'