1. 程式人生 > >python3進階之*args與**kwargs用法

python3進階之*args與**kwargs用法

{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用法