python中的關(guān)鍵字參數(shù)*args和**kwargs詳解
一、使用場景
在定義類或函數(shù)時,以下場景會用到*args和**kwargs,前者叫位置參數(shù),后者叫關(guān)鍵字參數(shù)
- 不確定傳入?yún)?shù)的數(shù)量或形式
- 不關(guān)心傳入?yún)?shù)的數(shù)量或形式(此時該類或函數(shù)多作為一個中間件的角色,接收參數(shù)后只是做了一些預(yù)處理,最后將這些參數(shù)傳遞給其他類或函數(shù)做進(jìn)一步處理,如裝飾器)
二、使用方法
基本使用:
def receive_args(*args, **kwargs): print(f'args type is: {type(args)}, value is: {args}') print(f'kargs type is: {type(kwargs)}, value is: {kwargs}') if __name__ == '__main__': receive_args(0,name='jyz')
輸出:
args type is: <class 'tuple'>, value is: (0,)
kargs type is: <class 'dict'>, value is: {'name': 'jyz'}
由此我們得出:args本質(zhì)是一個tuple,kwargs本質(zhì)是dict,值得注意的是,*是在定義函數(shù)的形式參數(shù)時用來標(biāo)志參數(shù)的類型(位置參數(shù)還是關(guān)鍵字參數(shù)),在函數(shù)體內(nèi)要拿到真正的參數(shù)需要將*去掉。
傳入多個參數(shù)
def receive_args(*args, **kwargs): print(f'args type is: {type(args)}, args[0] is: {args[0]}, args[1 ] is: {args[1]},args[2] is: {args[2]}') print(f"kwargs type is: {type(kwargs)}, name is: {kwargs['name']}, gender is: {kwargs['gender']}") if __name__ == '__main__': receive_args(0,1,2,name='jyz',gender='male')
輸出:
args type is: <class 'tuple'>, args[0] is: 0, args[1 ] is: 1,args[2] is: 2
kwargs type is: <class 'dict'>, name is: jyz, gender is: male
由于args本質(zhì)是一個tuple,kwargs本質(zhì)是dict,因此可以在函數(shù)中對它們直接進(jìn)行操作。
容易出錯的地方
def receive_args(*args, **kwargs): print('args is: ',args) print('kwargs is: ',kwargs) if __name__ == '__main__': a = 0 b = 1 d = {'name':'jyz','gender':'male'} receive_args(a,b,d)
輸出:
args is: (0, 1, {'name': 'jyz', 'gender': 'male'})
kwargs is: {}
出乎意料的是,receive_args并未將d當(dāng)做kwargs,而是作為args。而如果想要將字典類型作為關(guān)鍵字變量傳到函數(shù)中去,需要在變量前使用**做額外的標(biāo)志:
def receive_args(*args, **kwargs): print('args is: ',args) print('kwargs is: ',kwargs) if __name__ == '__main__': a = 0 b = 1 d = {'name':'jyz','gender':'male'} receive_args(a,b,**d) # d前用**做標(biāo)志
輸出:
args is: (0, 1)
kwargs is: {'name': 'jyz', 'gender': 'male'}
三、結(jié)論
- args本質(zhì)是一個tuple,kwargs本質(zhì)是dict;
- 傳入關(guān)鍵字參數(shù)時,要么使用key=value形式傳遞;要么先定義dict再使用**dict傳遞。
到此這篇關(guān)于python中的關(guān)鍵字參數(shù)*args和**kwargs詳解的文章就介紹到這了,更多相關(guān)python中的*args和**kwargs內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python3.6簡單操作Mysql數(shù)據(jù)庫
這篇文章主要為大家詳細(xì)介紹了Python3.6簡單操作Mysql數(shù)據(jù)庫,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09Python中的jquery PyQuery庫使用小結(jié)
這篇文章主要介紹了Python中的jquery PyQuery庫使用小結(jié),需要的朋友可以參考下2014-05-05Pycharm2020.1安裝中文語言插件的詳細(xì)教程(不需要漢化)
這篇文章主要介紹了Pycharm2020.1安裝中文語言插件的詳細(xì)教程,不需要漢化,本文給大家分享三種方法,在這小編推薦使用方法二,具體內(nèi)容詳情大家跟隨小編一起看看吧2020-08-08python起點(diǎn)網(wǎng)月票榜字體反爬案例
大家好,本篇文章主要講的是python起點(diǎn)網(wǎng)月票榜字體反爬案例,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12