不定長引數的裝包與拆包

2022-07-04 00:45:12 字數 1603 閱讀 7122

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

23(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=22)

輸出:123

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

23traceback (most recent call last):

file

"/home/chichung/桌面/不定長引數的裝包與拆包.py

", line 8, in

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的**

C 委託與不定長引數

當不確定乙個函式的具體定義形式時,我們可以定義乙個委託型別,以後將其他定義好的函式 賦值給 委託例項。委託是抽象的,而賦值給委託的函式是具體的。例如,對若干個數是做加和運算還是連乘運算不確定時,可以定義乙個委託,等以後要用時再分配具體的加和 連乘運算。在namespace下 public deleg...

不定長引數函式的實現

原始碼如下 int sum int num,return ret int main int argc,char argv 所謂不定長引數,就是函式的形參數量不定,型別也可能是不定的。我們把像上面的函式sum中如 int num 這樣的引數叫做 有名引數 後面用 代表的都是 匿名引數 有名引數是可以在...

Python的不定長引數研究

以乙個 開始的引數,代表乙個任意長的元組 def mul arg print arg mul 1,2,3,4,5,6,7,hello panfei 1,2,3,4,5,6,7,hello panfei 乙個元組 乙個以 開始的引數,代表乙個字典 def mul2 arg print arg mul2...