1,首先看一個簡單的函數fun1
def fun1(name, age, *args, **kwargs):
print(name)
print(age)
print(args)
print(kwargs)
fun1(10, 20, 30, 50, a=1, b=2)
其輸出結果想必都知道是什麼:
(結果)
2,再來看下面一個,在不看結果的情況下輸出結果你知道是什麼嗎
def fun1(name, age, *args, **kwargs):
print(name)
print(age)
print(args)
print(kwargs)
def fun2(name, age, *args, **kwargs):
fun1(name, age, args, kwargs)
fun2(10, 20, 30, 50, a=1, b=2)
下面就是輸出結果
(結果)
爲什麼會出現這個現象呢,下面我們來剖析一下
如何解決上面這種現象呢,那就是拆包
def fun1(name, age, *args, **kwargs):
print(name)
print(age)
print(args)
print(kwargs)
def fun2(name, age, *args, **kwargs):
fun1(name, age, *args, **kwargs)
fun2(10, 20, 30, 50, a=1, b=2)
(結果)
你能看出來代碼和上面未拆包之前哪裏不同嗎,就是在fun2調用fun1的時候在把args變成*args, 把kwargs變成**kwargs,這就是所謂的拆包,args前面加上*,那麼會將元組拆成30,50, kwargs前面加上**,會把字典拆成a=1,b=2,所以就會出現了我們上面看到的結果