摘要: 本文清晰地解釋了Python中的不同引數傳遞型別,并提供了示例代碼來說明每種型別的用法,對于初學者或不清楚Python傳參的讀者們來說是非常有益的,文中提供了足夠的資訊來理解和使用Python中的函式引數傳遞,
本文分享自華為云社區《提升Python函式呼叫靈活性:引數傳遞型別詳解》,作者:frica01 ,
前言
在Python編程中,函式引數起著非常重要的作用,函式引數允許我們向函式傳遞資料,并在函式內部使用這些值,Python提供了多種引數傳遞型別,包括位置引數、關鍵字引數、默認引數、可變數量的位置引數、可變數量的關鍵字引數,這些不同的引數傳遞方式使得函式呼叫更加靈活和可擴展,本文就來具體聊聊它們,
什么是Python傳參
在 Python 中,傳參是指在函式呼叫程序中將資料傳遞給函式的程序,傳參允許我們向函式傳遞資料,以便在函式內部使用這些資料進行操作和處理,
在 Python 中,函式定義時使用的引數稱為形式引數,也稱為形參,形參是在函式定義程序中用來接收傳遞給函式的值的占位符,形參在函式體內被當作變數來使用,可以在函式體中進行操作和處理,
實際引數,也稱為實參,是在函式呼叫時傳遞給函式的值或變數,實參是實際傳遞給函式的具體數值或物件,當我們呼叫一個函式時,需要為函式的形參提供相應的實參,這樣函式才能執行相應的操作,
下面是一個簡單的示例:
def demo(name): print("Hello, " + name + "!") demo("Frica")
在上面的例子中,name 是函式 demo 的形參,
在函式呼叫時,傳遞了實參 Frica 給函式 demo,它被賦值給形參 name,然后函式體內部使用這個值進行列印操作,
總結起來,形參是函式定義中用于接收傳遞給函式的值的占位符,而實參是在函式呼叫時實際傳遞給函式的具體數值或物件,形參和實參的對應關系使得函式能夠處理和操作具體的資料,
五種傳參型別
傳參型別可以單獨使用,也可以組合使用,根據需要在函式定義中靈活地選擇使用這些傳參型別,
以下是Python中常見的幾種傳參型別:
- 位置引數:位置引數是最常見的引數型別,通過按照引數定義的順序提供引數值;
- 關鍵字引數:關鍵字引數允許使用引數的名稱來指定值,而不必按照順序提供引數;
- 默認引數:默認引數允許為函式的一個或多個引數提供默認值,如果在函式呼叫時沒有提供引數值,函式將使用默認值;
- 可變數量的位置引數:可變數量的位置引數允許接受任意數量的位置引數,在函式定義中,使用星號(*)來指定一個可變數量的位置引數,如果沒有提供額外的位置引數,args將是一個空元組(());
- 可變數量的關鍵字引數:可變數量的關鍵字引數允許接受任意數量的關鍵字引數,在函式定義中,使用雙星號(**)來指定一個可變數量的關鍵字引數,如果沒有提供額外的關鍵字引數,kwargs將是一個空字典({}),
位置傳參
位置引數:位置引數是最常見的引數型別,當定義一個函式時,可以指定一個或多個位置引數,在呼叫函式時,需要按照引數的順序提供對應的值,例如:
def demo(name, age): print("Hello", name, "!") print("You are", age, "years old.") demo("Frica", 25)
在上面的例子中,name 和 age 是位置引數,按照順序分別提供 “Frica” 和 25 作為引數值,
關鍵字傳參
關鍵字引數:關鍵字引數允許你使用引數的名稱來指定值,而不必按照順序提供引數,使用關鍵字引數可以使代碼更加清晰和易讀,例如:
def demo(name, age): print("Hello", name, "!") print("You are", age, "years old.") demo(age=25, name="Frica")
在上面的例子中,通過使用 age=25 和 name="Frica" 來指定引數的值,而不必考慮它們的順序,
默認傳參
默認引數:默認引數允許為函式的一個或多個引數提供默認值,
如果在函式呼叫時沒有提供引數值,函式將使用默認值,默認引數通常在函式定義中指定,并且必須要位于位置引數之后(否則會有SyntaxError例外),例如:
def demo(name, age=18): print("Hello", name, "!") print("You are", age, "years old.") demo("Frica") # 使用默認值18 demo("Frica01", 25) # 覆寫默認值
在上面的例子中,age 引數有一個默認值 18,如果沒有為 age 提供引數值,函式將使用默認值,
可變數量的位置傳參
一般我們會使用 *args,當然,使用其它的變數也可以(這里的關鍵是 *,而不是args,
可變數量的位置傳參:可變數量的位置引數允許接受任意數量的位置引數,在可能不確定函式會接受多少個引數的情況下,可以使用可變數量的引數,在函式定義中,可以使用星號(*)來指定一個可變數量的位置引數,例如:
def print_info(*args): print(type(args))# 輸出: <class 'tuple'> total = sum(num for num in args) return total result = print_info(1, 2, 3, 4, 5)
print(result) # 輸出:15
在上面的例子中,print_info 函式接受任意數量的位置引數,并將它們相加,
可變數量的關鍵字傳參
一般我們會使用 **kwargs,當然,使用其它的變數也可以(這里的關鍵是 **,而不是kwargs,
可變數量的關鍵字引數傳遞:可變數量的關鍵字引數允許接受任意數量的關鍵字引數,在函式定義中,可以使用雙星號(**)來指定一個可變數量的關鍵字引數,例如:
def print_info(**kwargs): print(type(kwargs)) # 輸出: <class 'dict'> for key, value in kwargs.items(): print(key, ":", value) print_info(name="Frica", age=25, city="GuangZhou")
在上面的例子中,demo 函式接受任意數量的關鍵字引數,并將它們列印出來,
多種傳參型別組合
def print_info(name, *args, age=18, **kwargs): print("Name:", name) print("Age:", age) print("Additional arguments:") for arg in args: print("-", arg) print("Keyword arguments:") for key, value in kwargs.items(): print("-", key, ":", value) print_info("Frica", "arg1", "arg2", age=25, city="GuangZhou", country="China")
在上面的例子中,函式print_info接受以下引數:
- name是一個位置引數,必須提供值,
- *args是一個可變數量的位置引數,可以接受任意數量的額外引數,
- age是一個具有默認值的關鍵字引數,
- **kwargs是一個可變數量的關鍵字引數,可以接受任意數量的關鍵字引數,
通過呼叫print_info函式,并提供相應的引數,可以靈活地組合使用這些引數型別,在函式體內部,可以根據需要訪問和處理這些引數,
當呼叫print_info函式時,輸出如下:
Name: Frica Age: 25 Additional arguments: - arg1 - arg2 Keyword arguments: - city : GuangZhou - country : China
這個例子展示了多種傳參型別的組合,包括位置引數、可變數量的位置引數、具有默認值的關鍵字引數和可變數量的關鍵字引數,讀者可以根據實際的開發需求,在函式中靈活使用這些引數型別,
函式引數型別注解
這里以位置引數為例,
def demo(name: str, age: int) -> str: return "Hello, " + name + "! You are " + str(age) + " years old." print(demo("Frica", 25))# 輸出: Hello, Frica! You are 25 years old.
在這個例子中,引數 name 的型別被注解為字串型別 str,引數 age 的型別被注解為整數型別 int,回傳值的型別被注解為字串型別 str,引數型別注解可以提供型別提示,幫助開發者更好地理解函式的引數和回傳值的預期型別,
當然,這里只相當于是注釋,即使傳入的是其它型別是資料,也不會報錯!!!
總結
本文介紹了Python中函式引數的不同型別和傳遞方式,
- 位置引數是最常見的引數型別,按照引數定義的順序提供引數值,
- 關鍵字引數允許使用引數名稱來指定值,提高了代碼的可讀性,
- 默認引數為函式的一個或多個引數提供默認值,在函式呼叫時可以選擇性地提供引數值,
- 可變數量的位置引數和可變數量的關鍵字引數允許接受任意數量的位置引數和關鍵字引數,提供了處理不確定數量引數的便利性,
在函式定義中,我們可以根據需要靈活地選擇使用這些引數傳遞型別,以滿足開發的需求,通過合理選擇引數傳遞型別,可以使得函式呼叫更加方便、可讀,并提高代碼的可擴展性,
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/555326.html
標籤:Python
下一篇:返回列表
