1. 程式人生 > >不定長參數的裝包與拆包

不定長參數的裝包與拆包

rec 不定 pan 編寫 str 為什麽 int strong 需求

#轉載請聯系

def task(a,b,c,*args,**kwargs):
    print(a)
    print(b)
    print(c)
    print(args)
    print(kwargs)

task(1,2,3,4,5,6,name="chichung",age=22)

輸出:
1
2
3
(4, 5, 6)
{age: 22, name: chichung}

編寫函數時,如果沒辦法預計用戶傳入的參數有多少個,可以用裝包的方式。在進行數據的處理時,把包拆開,語法上就是把前面的*去掉。如果沒有把*去掉會出現什麽問題呢?

def task(a,b,c,*args,**kwargs):
    
print(a) print(b) print(c) print(*args) # print(**kwargs) task(1,2,3,4,5,6,name="chichung",age=22) 輸出: 1 2 3 4 5 6 # 一個這樣的東西,沒有逗號
def task(a,b,c,*args,**kwargs):
    print(a)
    print(b)
    print(c)
    # print(*args)
    print(**kwargs)

task(1,2,3,4,5,6,name="chichung",age

輸出:
1 2 3 Traceback (most recent call last): File "/home/chichung/桌面/不定長參數的裝包與拆包.py", line 8, in <module> task(1,2,3,4,5,6,name="chichung",age=22) File "/home/chichung/桌面/不定長參數的裝包與拆包.py", line 6, in task print(**kwargs) TypeError: age is an invalid keyword argument for this function

至於為什麽去掉**kwargs的*會報錯呢?我暫時也不知道原因- -|

現在有一個需求,task()函數裏面還要再寫一個函數,而且這個函數也要接收和task()函數一模一樣的參數,怎麽該做呢?

很簡單

def task(a,b,c,*args,**kwargs):
    #task的代碼
   task2(a,b,c,*args,**kwargs)  # 註意是有*號的。
    
def task2(a,b,c,*args,**kwargs):
    #task2的代碼

不定長參數的裝包與拆包