python中*和**的打包和解包


python中的*和**,能夠讓函數支持任意數量的參數,它們在函數定義和調用中,有着不同的目的

一. 打包參數

* 的作用:在函數定義中,收集所有的位置參數到一個新的元組,並將這個元組賦值給變量args

 1 >>> def f(*args):
 2     print(args)
 3    
 5 >>> f()
 6 ()
 7 >>> f(1)
 8 (1,)
 9 >>> f(1, 2, 3, 4)
10 (1, 2, 3, 4)
11 >>> 

** 的作用:在函數定義中,收集關鍵字參數傳遞給一個字典,並將這個字典賦值給變量kwargs

1 >>> def f(**kwargs):
2     print(kwargs)
3 
4     
5 >>> f()
6 {}
7 >>> f(a=1, b=2)
8 {'a': 1, 'b': 2}

二. 解包參數

* 的作用:在函數調用中,* 能夠將元組或者列表解包成不同的參數

 1 >>> def func(a, b, c, d):
 2     print(a, b, c, d)
 3 
 4     
 5 >>> args = (1, 2, 3, 4)
 6 >>> func(*args)
 7 1 2 3 4
 8 
 9 >>> args = [1, 2, 3, 4]
10 >>> func(*args)
11 1 2 3 4

** 的作用:在函數調用中,**會以鍵/值的形式解包一個字典,使其成為獨立的關鍵字參數

1 >>> def func(a, b, c, d):
2     print(a, b, c, d)
3 
4     
5 >>> kwargs = {"a": 1, "b": 2, "c": 3, "d": 4}
6 >>> func(**kwargs)
7 1 2 3 4

 

 

舉個栗子:

 1 # 參數解包:將整個list當做參數傳給函數
 2 list = [1, 2, 4]
 3  
 4  
 5 def add_fn(a, b, c):
 6     return a + b + c
 7  
 8  
 9 sum = add_fn(*list)
10 print("參數解包:", sum)

 運行結果:

1 參數解包: 7

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM