衆所周知,python的args是用來接收不定長的參數,而kwargs是用來接收不定長的關鍵字參數。
下面通過執行個體來看看如何真正的了解這兩個的用法。
def test2(a, b, *args, **kwargs):
print("------test2---------")
print(a)
print(b)
print(args)
print(kwargs)
def test1(a, b, *args, **kwargs):
print("-------test1---------")
print(a)
print(b)
print(args)
print(kwargs)
print("The output of a, b, args, kwargs")
test2(a, b, args, kwargs)
print("The output of a, b, *args, kwargs")
test2(a, b, *args, kwargs)
print("The output of a, b, *args, **kwargs")
test2(a, b, *args, **kwargs)
test1(11,22,33,44,55,66, name="zhangsan", age=18)
The output of the test code like following:
-------test1---------
11
22
(33, 44, 55, 66)
{‘name’: ‘zhangsan’, ‘age’: 18}
The output of a, b, args, kwargs
------test2---------
11
22
((33, 44, 55, 66), {'name': 'zhangsan', 'age': 18})
{}
從這個結果來看,(33, 44, 55, 66), {‘name’: ‘zhangsan’, ‘age’: 18}被作為一個整體傳給了test2函數的args對象;然後kwargs沒有實參。
The output of a, b, *args, kwargs
------test2---------
11
22
(33, 44, 55, 66, {'name': 'zhangsan', 'age': 18})
{}
從這個結果來看,(33, 44, 55, 66, {‘name’: ‘zhangsan’, ‘age’: 18})被作為一個整體傳給了test2函數的args對象;然後kwargs沒有實參。
The output of a, b, *args, **kwargs
------test2---------
11
22
(33, 44, 55, 66)
{'name': 'zhangsan', 'age': 18}
從這個結果來看,(33, 44, 55, 66)被作為一個整體傳給了test2函數的args對象; {‘name’: ‘zhangsan’, ‘age’: 18}傳給了kwargs參數,這個才是我們期待的結果。
總結起來,可以這麼了解,*args可以了解為對實參的一個拆包,**args也是對實參的拆包。不帶星花就不拆包,會被當做一個整體。