python中的關鍵字參數(shù)*args和**kwargs詳解
一、使用場景
在定義類或函數(shù)時,以下場景會用到*args和**kwargs,前者叫位置參數(shù),后者叫關鍵字參數(shù)
- 不確定傳入?yún)?shù)的數(shù)量或形式
- 不關心傳入?yún)?shù)的數(shù)量或形式(此時該類或函數(shù)多作為一個中間件的角色,接收參數(shù)后只是做了一些預處理,最后將這些參數(shù)傳遞給其他類或函數(shù)做進一步處理,如裝飾器)
二、使用方法
基本使用:
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本質是一個tuple,kwargs本質是dict,值得注意的是,*是在定義函數(shù)的形式參數(shù)時用來標志參數(shù)的類型(位置參數(shù)還是關鍵字參數(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本質是一個tuple,kwargs本質是dict,因此可以在函數(shù)中對它們直接進行操作。
容易出錯的地方
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當做kwargs,而是作為args。而如果想要將字典類型作為關鍵字變量傳到函數(shù)中去,需要在變量前使用**做額外的標志:
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前用**做標志
輸出:
args is: (0, 1)
kwargs is: {'name': 'jyz', 'gender': 'male'}
三、結論
- args本質是一個tuple,kwargs本質是dict;
- 傳入關鍵字參數(shù)時,要么使用key=value形式傳遞;要么先定義dict再使用**dict傳遞。
到此這篇關于python中的關鍵字參數(shù)*args和**kwargs詳解的文章就介紹到這了,更多相關python中的*args和**kwargs內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- 一文詳解Python可變參數(shù)(*args與**kwargs)的使用方法和應用場景
- Python在*args和**kwargs上強制規(guī)定參數(shù)簽名的技巧詳解
- Python函數(shù)參數(shù)*args和**kwargs的區(qū)別與使用指南
- Python中args和kwargs用法與區(qū)別舉例詳解
- Python中魔法參數(shù)?*args?和?**kwargs使用詳細講解
- 深入理解Python中的*args和**kwargs參數(shù)(示例代碼)
- 一文帶你精通Python中*args和**kwargs的應用技巧
- Python中*args與**kwargs的高級應用指南
- Python中*args和**kwargs的作用
- python-parser.parse_args()解析參數(shù)問題
- 一起解密Python中的*args和**kwargs無限可能的函數(shù)參數(shù)
- Python可變參數(shù)中星號args與雙星號kwargs的使用
相關文章
使用IPython下的Net-SNMP來管理類UNIX系統(tǒng)的教程
這篇文章主要介紹了使用IPython下的Net-SNMP來管理類UNIX系統(tǒng)的教程,本文來自于IBM官方網(wǎng)站技術文檔,需要的朋友可以參考下2015-04-04
Python實現(xiàn)希爾排序算法的原理與用法實例分析
這篇文章主要介紹了Python實現(xiàn)希爾排序算法,簡單講述了希爾排序的原理并結合具體實例形式分析了Python希爾排序的具體實現(xiàn)方法與使用技巧,需要的朋友可以參考下2017-11-11

