Python 函式
以下是這一節中,我們要來介紹的關於 Python 函式的知識點:
- 什麼是函式
- 如何來建立函式
- 函式的型別
什麼是 Python 函式
函式是一小塊程式,它包含許多執行特定任務的單行或多行語句。假如說你有一個數千行執行不同任務的程式碼,那麼你應該將程式劃分為小模組(塊),也就是將它們切割為不同的函式,這樣可以提高程式碼的可讀性並降低其複雜度。
如何來定義 Python 函式
以下是 Python 的定義函式的語法:
def functionName(arguments):
"""This is the definition of this function"""
statements
return returnParam
- 關鍵字
def
用於定義宣告函式。 functionName
是函式的名稱。arguments
是可選的,它引數提供了用於執行操作的輸入值。- 冒號(
:
)放在函式頭的結尾。 """This is the definition of this function"""
是一個函式文件說明,它是可選項,用來描述該函式的功能。statements
是函式主體,包括一行或多行程式碼。return
也是可選項,它將結果返回給該函式的呼叫者。
Python 函式示例
def language(p):
"""Function to print a message"""
print("Programming language:", p)
這裡 language
定義了一個函式,它有一個從呼叫者傳遞的引數 p
。在函式內部,有一個 docstring
-函式文件說明和一個 print
語句來列印含有引數 p
的資訊。
Python 中函式的呼叫
你可以從程式中的任何位置來呼叫已定義的函式,可以通過使用函式名稱以及所需輸入引數來呼叫該函式。
language('Python')
Programming language: Python
return
語句
return
語句將控制權轉移回撥用該函式的程式碼,它表示了函式定義在此結束。
return
的語法如下:
return [values_to_be_returned]
如果函式中沒有 return
語句,則預設返回一個 None
物件。
return
語句示例
def square(n):
return n*n
print("Square of 4=", square(4))
Square of 4=16
在此程式碼中,square(n)
函式在 print
函式中被呼叫,4 作為輸入引數被傳遞進去。在函式內部,有一個計算的達式-n*n
,計算的結果返回到呼叫函式的位置(print
語句)。
Python 變數的作用範圍和生命週期
變數的作用範圍是該變數能被訪問的有效範圍。當在函式內部宣告變數時,在函式的外部無法訪問它,這種型別的變數稱為區域性變數,只能在宣告它的函式內被訪問到。
變數的生命週期是變數存在於記憶體中的時間。當在函式內宣告變數時,當函式控制流程跳出該函式時,它的記憶體將被釋放。
如以下示例:
def fun():
a = 12
print("Value of a inside function:", a)
a = 24
fun()
print("Value of a outside function:", a)
Value of a inside function: 12
Value of a outside function: 24
在這段程式碼中,在函式內部的變數 a
和函式外部的變數 a
是不同的變數。
如果你嘗試從外部訪問函式內部宣告的變數,你將遇到錯誤 - NameError name 'x' is not defined
。但是在函式外部宣告的變數具有全域性範圍,可以從內部訪問。
函式型別
Python 中的函式可以分為兩種型別:
- 內建函式:預先定義的函式,用以執行特定任務。
- 自定義函式:由使用者來定義,包含任意數量的語句,用來以執行使用者定義的任務。
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn