當函數的參數前面有一個星號*的時候表示是一個可變的位置參數,兩個星號**表示是可變的關鍵字參數
可對函數傳遞的參數進行打包(元組tuple或字典dictionary),也能打散(分解成單個元素),其中元組的打包和解包使用單星號*,字典的打包和拆解使用雙行號**
打包,就是將傳遞給函數的任意多個(也可以是零個)非關鍵字參數/關鍵字參數打包成一個元組/字典(元組只能接收非關鍵字參數,字典只能接收關鍵字參數)
代碼如下(示例):
def param(*args, **kwarg):
for i in args:
print(i)
for i,j in kwarg.items():
print(j, j)
print('*' * 20)
if __name__ == '__main__':
param(1, 2, a=4, b=5)
param(2, 3, a=1, b=2, c=3)
返回結果:
1
2
4 4
5 5
********************
2
3
1 1
2 2
3 3
********************
Process finished with exit code 0
解包,就是將傳遞給函數的一個列表、元組或字典拆分成獨立的多個元素然後賦值給函數中的參數變量(包括普通的位置參數,關鍵字參數,元組,字典也即**關鍵字參數)
代碼如下(示例):
def param(*args, **kwarg):
for i in args:
print(i)
for i,j in kwarg.items():
print(j, j)
print('*' * 20)
if __name__ == '__main__':
a = (1, 2, 3)
b = [1, 16, 22]
c = {
'a':11, 'b':13}
param(a, c)
param(*a, **c)
param(b, c)
param(*b, **c)
返回結果:
#說明:param(a, c) 輸出a和b
(1, 2, 3)
{
'a': 11, 'b': 13}
********************
#說明:param(*a, **c) 打散a和c
1
2
3
11 11
13 13
********************
#說明:param(b, c) 輸出b和c
[1, 16, 22]
{
'a': 11, 'b': 13}
********************
#說明:param(*b, **c) 打散b和c
1
16
22
11 11
13 13
********************