1. 程式人生 > >python3 不定長引數

python3 不定長引數

在python的方法中引數可以傳遞多個值 可以傳遞指定個值 也可以傳遞不定個多餘的引數可以用*name和**keyname這樣形式的形參來接收

被*name1接收的引數自動轉化為一個元組 而被**name2接受的引數變為字典

MacdeMacBook-Pro:test hpb$ cat 不定長.py 
def test(a,b,c=33,*args,**keyname):
    print('a',a,type(a))
    print('b',b,type(b))
    print('c',c,type(c))
    print('args:',args,type(args))
    print('keyname:',keyname,type(keyname))

test(11,22,33,44,55,haha=666,hehe=777)
MacdeMacBook-Pro:test hpb$ python3 不定長.py 
a 11 <class 'int'>
b 22 <class 'int'>
c 33 <class 'int'>
args: (44, 55) <class 'tuple'>
keyname: {'haha': 666, 'hehe': 777} <class 'dict'>
MacdeMacBook-Pro:test hpb$ 

單純多餘的數字 例如44 55  會被 *name1接收

name=666此種形式的會被**name1接收

 

#注意不能66,name=11,77,name2=22  這種混著用 要不然會報錯

 

要是* 和**作為實參時用來把原組和字典拆開 把它裡面的值當做引數傳遞

MacdeMacBook-Pro:test hpb$ cat 不定長.py 
def test(a,b,c=33,*args,**keyname):
    print('a',a,type(a))
    print('b',b,type(b))
    print('c',c,type(c))
    print('args:',args,type(args))
    print('keyname:',keyname,type(keyname))

if __name__=='__main__':
    a=(100,200,300)
    b={'h':100,'e':111}
    test(11,22,33,44,55,*a,**b,haha=666,hehe=777)
MacdeMacBook-Pro:test hpb$ py3 不定長.py 
a 11 <class 'int'>
b 22 <class 'int'>
c 33 <class 'int'>
args: (44, 55, 100, 200, 300) <class 'tuple'>
keyname: {'h': 100, 'e': 111, 'haha': 666, 'hehe': 777} <class 'dict'>
MacdeMacBook-Pro:test hpb$