如何在 Python 函數中使用 *args 和 **kwargs
掌握 Python 中的 *args 和 **kwargs。了解如何使用動態位置和關鍵字參數編寫靈活的函數、解包集合以及建立包裝函數。
概述
在 Python 中,您經常需要設計一個可以接受可變數量參數的函數。例如,計算任意數量整數總和的函數,或記錄具有不同欄位的元資料的函數。 Python 不強制使用者傳遞清單或字典,而是提供了兩個特殊符號:「*args」和「**kwargs」。
`*args` 語法允許函數接受任意數量的位置參數。單一星號「*」充當解包運算子。當放置在函數定義中時,它將額外的位置參數收集到名為“args”的元組中。這使您可以迭代輸入值、運行計算或輕鬆地將它們傳遞給另一個函數。
另一方面,「**kwargs」語法允許函數接受任意數量的關鍵字(命名)參數。雙星號「**」將這些參數收集到名為「kwargs」的字典中。這對於傳遞可選配置、樣式參數或資料庫屬性非常有用。請記住,名稱“args”和“kwargs”是約定;實際功能由單星號和雙星號驅動。
程式碼和執行輸出
此程式碼示範了使用 *args 來求和變數數,使用 **kwargs 來列印使用者設定文件,並將兩者組合在一個函數中。
args_kwargs.py
在編輯器中嘗試def sum_all(*args):
print("args type:", type(args).__name__)
return sum(args)
print("Sum (1, 2, 3):", sum_all(1, 2, 3))
print("Sum (10, 20):", sum_all(10, 20))
def print_profile(**kwargs):
print("kwargs type:", type(kwargs).__name__)
for key, value in kwargs.items():
print(f"{key}: {value}")
print_profile(name="Bob", role="developer", country="US")
def master_function(first, *args, **kwargs):
print(f"First argument: {first}")
print(f"Additional positional args: {args}")
print(f"Keyword args: {kwargs}")
master_function("hello", 1, 2, 3, debug=True, user_id=42)端子輸出
args type: tuple
Sum (1, 2, 3): 6
args type: tuple
Sum (10, 20): 30
kwargs type: dict
name: Bob
role: developer
country: US
First argument: hello
Additional positional args: (1, 2, 3)
Keyword args: {'debug': True, 'user_id': 42}逐步實施
- 在參數前使用單一星號(例如,*args)將位置參數收集到元組中。
- 在參數前使用雙星號(例如 **kwargs)將關鍵字參數收集到字典中。
- 保持正確的參數順序:標準參數、*args、僅關鍵字參數,然後是 **kwargs。
- 透過傳遞 *iterable 或 **dictionary 來呼叫函數時使用解包語法。
常見問題解答
我必須使用名稱“args”和“kwargs”嗎?
不,這些是標準的社區慣例。僅 * 和 ** 前綴在語法上是必需的。您可以編寫 *values 和 **options,但強烈建議堅持使用 *args 和 **kwargs 以提高可讀性。
定義函數時正確的順序是?
函數簽章中參數的正確順序是:位置參數、*args、僅關鍵字參數,最後是 **kwargs。
相關主題
推薦的 Python 資源
透過相關的互動式教學、備忘單和程式碼比較來擴展您的知識。