在開發過程當中,咱們須要計算兩個數的和,代碼以下:python
root@ubuntu:/home/python/codes/python基礎-05# cat test.py #-*- coding:utf-8 -*- def sum_2_nums(a,b): result = a+b print("result=%d"%result) num1 = int(input("第1個數:")) num2 = int(input("第2個數:")) sum_2_nums(num1,num2) root@ubuntu:/home/python/codes/python基礎-05# python3 test.py 第1個數:1 第2個數:2 result=3
可是若是咱們想計算n個數的和,那麼代碼須要怎麼寫呢?ubuntu
root@ubuntu:/home/python/codes/python基礎-05# cat test.py #-*- coding:utf-8 -*- def sum_n_nums(a,b,*args): #在這裏定義的函數中攜帶三個參數,a,b,args,那麼這個*args是啥呢?表示都存放在*args,變量名任叫args,*表明着對python解釋器說:若是傳遞的實參個數大於形參的個數,剩下的都給#args result = a+b for temp in args: result += temp print("result=%d"%result) sum_n_nums(11,22,33,44,55) root@ubuntu:/home/python/codes/python基礎-05# python3 test.py result=165
讓咱們來具體的來看一下*args是什麼東西:函數
root@ubuntu:/home/python/codes/python基礎-05# cat test.py #-*- coding:utf-8 -*- def sum_n_nums(a,b,*args): #*args表示命名函數 print(a) print(b) print(args) sum_n_nums(11,22,33,44,55) root@ubuntu:/home/python/codes/python基礎-05# python3 test.py 11 22 (33, 44, 55) #元組,也就是說*告訴python解釋器,若是有多傳進來的值,都交給*args,而後以元組的形式保存起來
root@ubuntu:/home/python/codes/python基礎-05# cat test.py #-*- coding:utf-8 -*- def sum_n_nums(a,b,*args): print(a) print(b) print(args) sum_n_nums(11,22,33) root@ubuntu:/home/python/codes/python基礎-05# python3 test.py 11 22 (33,) #這個是什麼鬼,原來當元組只有一個參數的時候,須要在後面添加一個「,」號,總體才能夠稱爲元組,不然別人也不知道這是什麼東西
root@ubuntu:/home/python/codes/python基礎-05# cat test.py #-*- coding:utf-8 -*- def sum_n_nums(a,b,*args): print(a) print(b) print(args) sum_n_nums(11,22) root@ubuntu:/home/python/codes/python基礎-05# python3 test.py 11 22 () #由於在調用函數的時候只是傳遞了兩個參數
root@ubuntu:/home/python/codes/python基礎-05# cat test.py #-*- coding:utf-8 -*- def sum_n_nums(a,b,*args,**kwargs): print(a) print(b) print(args) print(kwargs) sum_n_nums(11,22,33,name='xiaoyafei',age=19) #有的人可就納悶了,怎麼調用函數還有帶變量名的,在這裏解釋一句,**kwargs是字典形式參數,若是傳遞了多餘的參數,而多餘的參數面前是不帶變量名的,通通都給args,
不然都交給kwargs,而且是以字典的形式保存的
root@ubuntu:/home/python/codes/python基礎-05# python3 test.py 11 22 (33,) {'name': 'xiaoyafei', 'age': 19}
*args表示告訴python解釋器這個變量能夠保存沒有名字的變量的值spa
**kwargs表示告訴python解釋器能夠保存實參裏帶有名字的參數code
root@ubuntu:/home/python/codes/python基礎-05# cat test.py #-*- coding:utf-8 -*- def sum_n_nums(a,b,c=33,*args,**kwargs): print(a) print(b) print(c) print(args) print(kwargs) A = [11,22,33] B = {"name":"laowang","age":20} sum_n_nums(11,22,33,*A,**B) root@ubuntu:/home/python/codes/python基礎-05# python3 test.py 11 22 33 (11, 22, 33) {'name': 'laowang', 'age': 20}
1.若是想往函數裏傳遞的是元組裏的內容/字典裏的內容,未來在調用的時候再元組前寫上*,在字典面前寫上**blog
2.*和**表示拆包,把元組拆成一個一個的值,把字典拆成一個一個的key valueutf-8
3.若是沒有寫*和**,那麼就會當成一個普通的值扔到args裏開發
4.在實參裏寫入*和**表示拆包,把裏面的值當作參數傳遞input