Python中args和kwargs用法與區(qū)別舉例詳解
前言
大家好,今天我們來聊聊Python中的兩個(gè)非常強(qiáng)大的特性:*args
和**kwargs
。這兩個(gè)東西在函數(shù)定義中經(jīng)常出現(xiàn),但很多初學(xué)者對(duì)它們的理解還不夠深入。今天我們就來徹底搞懂它們的用法和區(qū)別,讓你在寫代碼時(shí)更加得心應(yīng)手!
1. 什么是*args和kwargs?**
*args
和**kwargs
是Python中用于函數(shù)定義的兩種特殊語法,主要用于處理可變數(shù)量的參數(shù)。它們的名字并不重要(你可以用其他名字代替),但通常約定俗成使用*args
和**kwargs
。
*args
:用于傳遞可變數(shù)量的非關(guān)鍵字參數(shù)(位置參數(shù))。**kwargs
:用于傳遞可變數(shù)量的關(guān)鍵字參數(shù)(鍵值對(duì)參數(shù))。
2. args的使用方法
*args
允許你向函數(shù)傳遞任意數(shù)量的非關(guān)鍵字參數(shù)。這些參數(shù)會(huì)被打包成一個(gè)元組(tuple),在函數(shù)內(nèi)部可以通過args
來訪問。
2.1 基本用法
def my_function(*args): for arg in args: print(arg) my_function(1, 2, 3)
輸出:
1
2
3
2.2 與其他參數(shù)一起使用
*args
可以和其他參數(shù)一起使用,但必須放在位置參數(shù)之后。
def my_function(a, b, *args): print("a:", a) print("b:", b) print("args:", args) my_function(1, 2, 3, 4, 5)
輸出:
a: 1
b: 2
args: (3, 4, 5)
3. kwargs的使用方法
**kwargs
允許你向函數(shù)傳遞任意數(shù)量的關(guān)鍵字參數(shù)。這些參數(shù)會(huì)被打包成一個(gè)字典(dict),在函數(shù)內(nèi)部可以通過kwargs
來訪問。
3.1 基本用法
def my_function(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}") my_function(name="Alice", age=25, city="Beijing")
輸出:
name: Alice
age: 25
city: Beijing
3.2 與其他參數(shù)一起使用
**kwargs
可以和其他參數(shù)一起使用,但必須放在位置參數(shù)和*args之后。
def my_function(a, b, *args, **kwargs): print("a:", a) print("b:", b) print("args:", args) print("kwargs:", kwargs) my_function(1, 2, 3, 4, name="Alice", age=25)
輸出:
a: 1
b: 2
args: (3, 4)
kwargs: {'name': 'Alice', 'age': 25}
4. *args和kwargs的區(qū)別**
特性 | *args | **kwargs |
---|---|---|
參數(shù)類型 | 非關(guān)鍵字參數(shù)(位置參數(shù)) | 關(guān)鍵字參數(shù)(鍵值對(duì)參數(shù)) |
打包形式 | 打包成元組(tuple) | 打包成字典(dict) |
使用場(chǎng)景 | 處理不確定數(shù)量的位置參數(shù) | 處理不確定數(shù)量的關(guān)鍵字參數(shù) |
函數(shù)調(diào)用 | func(1, 2, 3) | func(name="Alice", age=25) |
函數(shù)定義 | def func(*args): | def func(**kwargs): |
5. 實(shí)際應(yīng)用場(chǎng)景
5.1 函數(shù)裝飾器
在編寫裝飾器時(shí),*args
和**kwargs
非常有用,因?yàn)樗鼈兛梢蕴幚砣我鈹?shù)量和類型的參數(shù)。
def my_decorator(func): def wrapper(*args, **kwargs): print("Before function call") result = func(*args, **kwargs) print("After function call") return result return wrapper @my_decorator def my_function(a, b): return a + b print(my_function(1, 2))
輸出:
Before function call
After function call
3
5.2 繼承與重寫
在類的繼承中,*args
和**kwargs
可以用于傳遞父類的參數(shù)。
class Parent: def __init__(self, name): self.name = name class Child(Parent): def __init__(self, age, *args, **kwargs): super().__init__(*args, **kwargs) self.age = age child = Child(age=10, name="Alice") print(child.name, child.age)
輸出:
Alice 10
6. 注意事項(xiàng)
命名規(guī)范:
*args
和**kwargs
是約定俗成的命名方式,但你可以使用其他名字,比如*numbers
或**options
。
順序問題:
- 在函數(shù)定義中,
*args
必須放在位置參數(shù)之后,**kwargs
必須放在*args
之后。
- 在函數(shù)定義中,
靈活性與可讀性:
- 雖然
*args
和**kwargs
非常靈活,但過度使用可能會(huì)降低代碼的可讀性。建議在明確需要處理可變數(shù)量參數(shù)時(shí)使用。
- 雖然
7. 總結(jié)
*args
用于處理可變數(shù)量的非關(guān)鍵字參數(shù),打包成元組。**kwargs
用于處理可變數(shù)量的關(guān)鍵字參數(shù),打包成字典。- 兩者可以結(jié)合使用,但必須遵循順序:位置參數(shù) ->
*args
->**kwargs
。
掌握*args
和**kwargs
的使用方法,可以讓你寫出更加靈活和強(qiáng)大的Python代碼。
到此這篇關(guān)于Python中args和kwargs用法與區(qū)別舉例詳解的文章就介紹到這了,更多相關(guān)python中args和kwargs用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python函數(shù)參數(shù)*args**kwargs用法實(shí)例
- 用實(shí)例說明python的*args和**kwargs用法
- Python中*args和**kwargs的區(qū)別詳解
- Python可變參數(shù)*args和**kwargs用法實(shí)例小結(jié)
- 關(guān)于Python中*args和**kwargs的深入理解
- Python可變參數(shù)*args和**kwargs
- Python中*args與**kwargs的高級(jí)應(yīng)用指南
- Python *args和**kwargs用法實(shí)例解析
- Python中的“_args”和“__kwargs”用法詳解
相關(guān)文章
基于python3實(shí)現(xiàn)socket文件傳輸和校驗(yàn)
這篇文章主要為大家詳細(xì)介紹了基于python3實(shí)現(xiàn)socket文件傳輸和校驗(yàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07Python Selenium中等待設(shè)置的實(shí)現(xiàn)
本文主要介紹了Python Selenium中等待設(shè)置的實(shí)現(xiàn),過詳實(shí)的示例代碼,深入介紹了顯式等待、隱式等待、自定義等待條件、多重等待條件、頁面加載狀態(tài)的等待、元素存在與可見性等待、Fluent等待以及異步JavaScript加載的等待,感興趣的可以了解一下2023-12-12Python結(jié)合PyWebView庫打造跨平臺(tái)桌面應(yīng)用
隨著Web技術(shù)的發(fā)展,將HTML/CSS/JavaScript與Python結(jié)合構(gòu)建桌面應(yīng)用成為可能,本文將系統(tǒng)講解如何使用PyWebView庫實(shí)現(xiàn)這一創(chuàng)新方案,希望對(duì)大家有一定的幫助2025-04-04python3中_from...import...與import?...之間的區(qū)別詳解(包/模塊)
Python編碼第一步是導(dǎo)入模塊,有時(shí)候用import?***有時(shí)候用from...import,下面這篇文章主要給大家介紹了關(guān)于python3中_from...import...與import?...之間區(qū)別的相關(guān)資料,需要的朋友可以參考下2022-08-08