Python中*args和**kwargs的博弈

*args用法
傳遞任意數(shù)量的參數(shù)
當(dāng)你不確定你的函數(shù)里將要傳遞多少參數(shù)時你可以用*args.例如,它可以傳遞任意數(shù)量的參數(shù)。
def print_everything(*args):for count, thing in enumerate(args):print '{0}. {1}'.format(count, thing)...print_everything('apple', 'banana', 'cabbage')0. apple1. banana2. cabbage
在函數(shù)處新增x和y變量
在函數(shù)中如果定義了變量x和y,*args放在函數(shù)中可以新增x和y的變量,簡答方便。
def func(x,y,*args):print(type(x))print(x)print(y)print(type(args))print(args)print_func(1,2,'one',[])>>><class 'int'>12<class 'tuple'>('one', [])
將*args放在函數(shù)變量最前面
def func(*args,x,y):print(type(x))print(x)print(y)print(type(args))print(args)
運(yùn)行時出現(xiàn)如下報錯信息:
TypeError: func() missing 2 required keyword-only arguments: 'x' and 'y'def func(*args,x,y):print(type(x))print(x)print(y)print(type(args))print(args)print_func(1,2,'one',[],x='x',y='y')
可以正確輸出
<class 'str'>xy<class 'tuple'>(1, 2, 'one', [])
**kwargs用法
**kwargs允許你將不定長度的 【鍵值對 key-value 】,作為參數(shù)傳遞給一個函數(shù)。如果你想要在一個函數(shù)里處理帶名字的參數(shù),你應(yīng)該使用**kwargs
**kwargs允許你使用沒有事先定義的參數(shù)名:
def table_things(**kwargs):for name, value in kwargs.items():print '{0} = {1}'.format(name, value)...table_things(apple = 'fruit', cabbage = 'vegetable')cabbage = vegetableapple = fruit

組合使用 args,*args 和 **kwargs 來調(diào)用函數(shù)
命名參數(shù)首先獲得參數(shù)值然后所有的其他參數(shù)都傳遞給*args和**kwargs.命名參數(shù)在列表的最前端
def func(x, *args, **kwargs):print(x)print(args)print(kwargs)print_func(1, 2, 3, 4, y=1, a=2, b=3, c=4)
運(yùn)行結(jié)果
1(2, 3, 4){'y': 1, 'a': 2, 'b': 3, 'c': 4}

推薦閱讀
(點(diǎn)擊標(biāo)題可跳轉(zhuǎn)閱讀)
教你用Python制作實(shí)現(xiàn)自定義字符大小的簡易小說閱讀器
小程序云開發(fā)項(xiàng)目的創(chuàng)建與配置
匯總超全Matplotlib可視化最有價值的 50 個圖表(附 Python 源代碼)(一)
老鐵,三連支持一下,好嗎?↓↓↓


點(diǎn)分享

點(diǎn)點(diǎn)贊

點(diǎn)在看
評論
圖片
表情

