对python中的装包与解包实例详解
*args和**kwargs是常用的两个参数
*args:用于接受多余的未命名的参数,元组类型。
**kwargs:用于接受形参的命名参数,字典类型的数据。
可变参数args:
deffun(n,*args): print(n) print(args)#未拆包 print(*args)#进行拆包 fun(1,2,3,4)
结果:
1 (2,3,4) 234
形参中的*args是接受数据的args,它是一个元组,把传入的数据放进args元组中。
函数中的args仍然是元组,*args就是将元组的数据进行拆包,一开始输入的形式。
关键字参数**kwargs
deffun(**kwargs): print(kwargs)#未拆包 print(*kwargs)#进行拆包 fun(a=1,b=2)
结果:
{'a':1,'b':2} ab
*args用来接受多余的未命名参数,**kwargs是用来接受命名参数。
装包的意义就是把未命名的参数和命名的参数放在元组或字典中。
解包
上面介绍了args,kwargs的装包作用,起到作用的是、这两个参数。
1.解包的意义就是将传递给函数的一个列表,元组,字典,拆分成独立的多个元素然后赋值给函数中的参变量。
2.解压字典有两种解发,一种用*解的只有key,一种用**解的有key,value。但是这个方法**只能在函数定义中使用。
deffun(*args,**kwargs): forarginargs: print(arg) fork,vinkwargs.items(): print(k,v) print('-'*50) fun(a,c)#参数都赋值给args,并没有kwargs的参数 fun(*a,*c)#解压的参数都赋值给args等价为1,2,3,'a','b','c' fun(*a,**c)#a解压给args,c解压给kwargs等价为1,2,3,'a'=1,'b'=2,'c'=3
结果:
[1,2,3] {'a':1,'b':2,'c':3} -------------------------------------------------- 1 2 3 a b c -------------------------------------------------- 1 2 3 a1 b2 c3
问题:
在传入参数时,可变参数(*)之前不能指定参数名
defmyfun(a,*b): print(a) print(b) myfun(a=1,2,3,4) myfun(a=1,2,3,4) ^ SyntaxError:positionalargumentfollowskeywordargument
2.函数传入实参时,可变参数(*)之后的参数必须指定参数名,否则就会被归到可变参数之中
defmyfun(a,*b,c=None): print(a) print(b) print(c) myfun(1,2,3,c=4) 1 (2,3) 4
3.一个函数想要使用时必须明确指定参数名,可以将所有参数都放在可变参数之后
defmyfun(*,a,b): print(a) print(b) myfun(a=1,b=2)
4.关键字参数都只能作为最后一个参数,前面的参数按照位置赋值还是名称赋值都可以
defmyfun(a,*b,c,**d): print(a) print(b) print(c) print(d) myfun(1,2,w=6,c=3,d=4,e=5)#记住可变参数(*)之前不能指定参数名 1 (2,) 3 {'w':6,'d':4,'e':5}
以上这篇对python中的装包与解包实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。