Python 函式
函式是一段只在被呼叫時執行的程式碼塊。
你可以將資料(稱為引數)傳遞給函式。
函式可以返回資料作為結果。
建立函式
在 Python 中,函式使用 def 關鍵字定義
示例
def my_function()
print("Hello from a function")
呼叫函式
要呼叫函式,請使用函式名後跟括號
引數
資訊可以作為引數傳遞給函式。
引數在函式名之後、括號內指定。您可以新增任意數量的引數,只需用逗號分隔即可。
下面的例子有一個帶有一個引數 (fname) 的函式。呼叫函式時,我們傳遞一個名字,該名字在函式內部用於列印全名
示例
def my_function(fname)
print(fname + " Refsnes")
my_function("Emil")
my_function("Tobias")
my_function("Linus")
自己動手試一試 »
引數在 Python 文件中通常縮寫為args。
引數或實參?
術語引數和實參可以指代同一事物:傳遞給函式的資訊。
從函式的角度來看
引數是函式定義中括號內的變數。
實參是在呼叫函式時傳送到函式的值。
引數數量
預設情況下,函式必須使用正確數量的引數呼叫。這意味著如果你的函式需要 2 個引數,你必須用 2 個引數呼叫該函式,不能多也不能少。
示例
此函式需要 2 個引數,並接收 2 個引數
def my_function(fname, lname)
print(fname + " " + lname)
my_function("Emil", "Refsnes")
自己動手試一試 »
示例
此函式需要 2 個引數,但只收到 1 個
def my_function(fname, lname)
print(fname + " " + lname)
my_function("Emil")
自己動手試一試 »
任意引數,*args
如果你不知道有多少個引數將被傳遞到你的函式中,請在函式定義中引數名前面加上 *
。
這樣函式將接收一個引數元組,並可以相應地訪問其中的項
示例
如果引數數量未知,請在引數名前面加上 *
def my_function(*kids)
print("The youngest child is " + kids[2])
my_function("Emil", "Tobias", "Linus")
自己動手試一試 »
任意引數在 Python 文件中通常縮寫為*args。
關鍵字引數
你也可以使用鍵 = 值語法傳送引數。
這樣引數的順序就不重要了。
示例
def my_function(child3, child2, child1)
print("The youngest child is " + child3)
my_function(child1 = "Emil", child2 = "Tobias", child3 = "Linus")
自己動手試一試 »
關鍵字引數在 Python 文件中通常縮寫為kwargs。
任意關鍵字引數,**kwargs
如果你不知道有多少個關鍵字引數將被傳遞到你的函式中,請在函式定義中引數名前面加上雙星號:**
。
這樣函式將接收一個引數字典,並可以相應地訪問其中的項
示例
如果關鍵字引數數量未知,請在引數名前面加上雙 **
def my_function(**kid)
print("His last name is " + kid["lname"])
my_function(fname = "Tobias", lname = "Refsnes")
自己動手試一試 »
任意關鍵字引數在 Python 文件中通常縮寫為**kwargs。
預設引數值
下面的例子展示瞭如何使用預設引數值。
如果我們在沒有引數的情況下呼叫函式,它會使用預設值
示例
def my_function(country = "Norway")
print("I am from " + country)
my_function("Sweden")
my_function("India")
my_function()
my_function("Brazil")
自己動手試一試 »
將列表作為引數傳遞
你可以將任何資料型別(字串、數字、列表、字典等)的引數傳遞給函式,它在函式內部將被視為相同的資料型別。
例如,如果你將一個列表作為引數傳遞,當它到達函式時它仍然是一個列表
示例
def my_function(food)
for x in food
print(x)
fruits = ["apple", "banana", "cherry"]
my_function(fruits)
自己動手試一試 »
返回值
要讓函式返回值,請使用 return
語句。
示例
def my_function(x)
return 5 * x
print(my_function(3))
print(my_function(5))
print(my_function(9))
自己動手試一試 »
pass 語句
function
定義不能為空,但如果你出於某種原因有一個沒有內容的 function
定義,請放置 pass
語句以避免錯誤。
僅位置引數
你可以指定函式只能接受僅位置引數,或只能接受關鍵字引數。
要指定函式只能接受僅位置引數,請在引數後新增 , /
沒有 , /
,即使函式期望位置引數,你實際上也可以使用關鍵字引數
但新增 , /
後,如果你嘗試傳送關鍵字引數,你將收到一個錯誤
僅關鍵字引數
要指定函式只能接受僅關鍵字引數,請在引數之前新增 *,
沒有 *,
,即使函式期望關鍵字引數,你也可以使用位置引數
但新增 *, /
後,如果你嘗試傳送位置引數,你將收到一個錯誤
組合僅位置引數和僅關鍵字引數
你可以在同一個函式中組合這兩種引數型別。
/
之前的任何引數都是僅位置引數,*
之後的任何引數都是僅關鍵字引數。
遞迴
Python 也接受函式遞迴,這意味著一個已定義的函式可以呼叫自身。
遞迴是常見的數學和程式設計概念。它的意思是函式呼叫自身。這帶來了好處,意味著你可以迴圈遍歷資料以達到結果。
開發人員在使用遞迴時應非常小心,因為它很容易編寫出永不終止的函式,或者使用過量記憶體或處理器能力的函式。然而,如果編寫正確,遞迴可以是一種非常高效且數學上優雅的程式設計方法。
在這個例子中,tri_recursion() 是我們定義用來呼叫自身的函式(“遞迴”)。我們使用 k 變數作為資料,它在每次遞迴時遞減(-1)。當條件不再大於 0(即等於 0)時,遞迴結束。
對於新的開發者來說,可能需要一些時間來弄清楚這究竟是如何工作的,最好的方法是透過測試和修改它。
示例
遞迴示例
def tri_recursion(k)
if(k > 0)
result = k + tri_recursion(k - 1)
print(result)
else
result = 0
return result
print("\n\nRecursion Example Results")
tri_recursion(6)
自己動手試一試 »