python3進階之*args與**kwargs用法
阿新 • • 發佈:2018-04-24
{0} class 表示 可變參 mat 命名 lov 多個 pre
*args 和 **kwargs 主要用於函數定義。 你可以將不定數量的參數傳遞給一個函數。不定的意思是:預先並不知道, 函數使用者會傳遞多少個參數給你, 所以在這個場景下使用這兩個關鍵字。其實並不是必須寫成*args 和**kwargs。 *(星號)才是必須的. 你也可以寫成*ar 和**k. 而寫成*args 和**kwargs只是一個通俗的命名約定.
python函數傳遞參數的方式有兩種:
位置參數(positional argument)
關鍵詞參數(keyword argument)
*args與**kwargs的區別,兩者都是python中的可變參數。
*args表示任何多個無名參數,它本質是一個tuple;
**kwargs表示關鍵字參數,它本質上是一個dict;
如果同時使用*args和**kwargs時,必須*args參數列要在**kwargs前。
示例1.
def fun(*args,**kwargs):
print(‘args=‘, args)
print(‘kwargs=‘,kwargs)
fun(1,2,3,4,A=‘a‘,B=‘b‘,C=‘c‘,D=‘d‘)
輸出:
args= (1, 2, 3, 4)
kwargs= {‘A‘: ‘a‘, ‘B‘: ‘b‘, ‘C‘: ‘c‘, ‘D‘: ‘d‘}
示例2:
def mutil(name,*ar):
print(name,"主人,你好")
for item in ar:
print("我的名字叫:",item)
mutil("liuhu","xiaoyun","liuwei")
# liuhu 主人,你好
# 我的名字叫: xiaoyun
# 我的名字叫: liuwei
示例3:
def love(**kwargs):
for key,value in kwargs.items():
print("{0}愛著{1}".format(key,value))
love(name="liuhu",age=18)
# name愛著liuhu
# age愛著18
示例4:
def test(arg1, arg2, arg3):
print("arg1:", arg1)
print("arg2:", arg2)
print("arg3:", arg3)
args = ("two", 3, 5)
test(*args)
kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
test(**kwargs)
# arg1: two
# arg2: 3
# arg3: 5
# arg1: 5
# arg2: two
# arg3: 3
python3進階之*args與**kwargs用法