python函數之可變長參數

可變長參數

可變長參數:指的是在調用函數時,傳入的參數個數能夠不固定app

調用函數時,傳值的方式無非倆種,一種是位置實參,另外一種是關鍵字實參,所以形參也必須得又倆種解決方法,以此來分別接收溢出的位置實參和關鍵字實參函數

1、可變長形參之*

形參中的====會將溢出的位置實參所有接受,而後以元組的形式存儲,而後把元組賦值給====後的參數,須要注意的是==*==後的參數名約定成俗成爲==args==code

def sum_sef(*args):
    res = 0
    for num in args:
        res+=num
    return  res
res = sum_sef(1,2,3,4,5)#因爲沒有型參來接受實參的值,故所有給args
print(res)


#輸出:15
def sum_sef(x,*args):
    res = 0
    for num in args:
        res+=num
    return  res
res = sum_sef(1,2,3,4,5) #形參x接受了1,剩下的實參沒有形參接受
print(res)

#輸出:14

2、可變長實參之*

實參中的====會將====後參數的值循環取出,打散成位置實參,之後但凡碰到實參中帶有==*==的,就是位置實參,應該立刻進行打散成位置實參去看。it

def sum_sef(x,y,z,*args):
    print(x,y,z,args)
    print(args)         #arg中存儲了(4,5,6)
    print(*args)       #輸出的時候加上*能夠去掉()
    print(type(args))  #args 是元組類型


sum_sef(1,*(2,3),4,5,6)   #將*號內元素打散成,1,2,3,4,5,6,對形參進行賦值

#輸出:
1 2 3 (4, 5, 6)
(4, 5, 6)
4 5 6
<class 'tuple'>

3、可變長形參之**

形參中的====會將溢出的關鍵字實參所有接收,而後存儲字典的形式,而後把字典賦值給====後的參數,須要注意的是==**==後的參數名約定成俗爲==kwargs==class

def func(x,y,**kwargs):
    print(kwargs)
func(7,8,a=5,b=6)

#輸出:
{'a': 5, 'b': 6}

4、可變長實參之**

實參中的====,會將參數後面的值循環取出,打散成關鍵字實參,之後遇到實參中帶有====的,就是關鍵字實參,應該立刻就打散成關鍵字實參去看。循環

def func(x,y,b,**kwargs):  #形參中不可任意的添加值,好比z,由於在實參中並無值和z對應
    print(x,y,b)
    print(kwargs)
func(7,8,**{'a': 5, 'b': 6,'c':7}) #打散後,因爲形參中有b,所以提出b值,其他的賦值給**kwargs
#輸出:
7 8 6
{'a': 5, 'c': 7}

5、可變長參數應用

def index(name,age,sex):
    print('name:',name,'age:',age,'sex:',sex)

def wrapper(*args,**kwargs):
    print('args:',args,'lwargs:',kwargs)

index('chen',18,'male')
wrapper(name='chen',sex='male',age=19)


#輸出:
name chen age 18 sex male
args: () lwargs: {'name': 'chen', 'sex': 'male', 'age': 19}

6、命名關鍵字形參

def register(x,y,**kwargs):
    if 'name' not in kwargs or 'age' not in kwargs:
        print('用戶名必須使用關鍵字的形式傳值')
        return
    print(kwargs['name'])
    print(kwargs['age'])

register(12,13,name='chen',age='18')



#輸出:
chen
18

命名關鍵字形參:在函數定義階段,*後面的參數都是命名關鍵字參數方法

特色:在傳值時,必須按照key=value的方式傳值,而且key必須命名關鍵字參數的指定的參數。命名

def register(x, y, *, name, gender='male', age):
    print(x)
    print(y)
    #print(*)  #特殊字符無心義
    print(name)
    print(gender)
    print(age)


register(1, 2, name='nick', age=19)



#輸出:
1
2
nick
male
19
相關文章
相關標籤/搜索