08-不定長函數

在開發過程當中,咱們須要計算兩個數的和,代碼以下: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

相關文章
相關標籤/搜索