案例建网站,杭州网站建设出名,wordpress!资源,电子商务网站的功能分析DAY 8. *args和**kwargs
*args#xff1a;多值元组#xff0c;**kwargs多值字典#xff0c;他们是python函数传参时两个特殊的参数#xff0c;args和kwargs并不是强制的#xff0c;但习惯使用这两个#xff0c;如果在函数参数列表中声明了*args#xff0c;则允许传递任…DAY 8. *args和**kwargs
*args多值元组**kwargs多值字典他们是python函数传参时两个特殊的参数args和kwargs并不是强制的但习惯使用这两个如果在函数参数列表中声明了*args则允许传递任意多的参数多余的参数会被以元组的形式赋给args变量而**kwargs允许你使用没有定义的变量名会把显式传递的参数打包成字典
def output(*args, **kwargs):print(args)print(kwargs)output(zhangsan, lisi, 5, 6,a1,b2,c3)# (zhangsan, lisi, 5, 6)
# {a: 1, b: 2, c: 3}如果函数还有别的参数传递参数时会从左到右依次对照赋值所以请务必把*args和**kwargs放在函数参数列表的最后否则会抛出TypeError异常并且*args必须放在**kwargs前面正确的参数顺序应该是
def fun(arg, *args, **kwargs):pass在调用函数时也可以使用*和**
def put(a, b, c):print(fa{a},b{b},c{c})put(*mylist) # aaardvark,bbaboon,ccats {a: 1, b: 2, c: 3}
put(**s) # a1,b2,c3之所以能实现这样的功能原理是序列解包下面简单介绍序列解包 s ABCDEa,b,c,d,e sa,c
(A, C) t (1,2,3,4,5)a1,b1,c1,d1,e1 ta1,c1
(1, 3)上面就是用到了序列解包左右两端的元素个数必须相等否则会抛出ValueError异常 a2,b2 s
Traceback (most recent call last):File pyshell#6, line 1, in modulea2,b2 s
ValueError: too many values to unpack (expected 2)但总不能所有序列都一一对应把如果序列有很多位或不确定有多少位时使用序列解包就显得很不方便了这时候就可以使用*和了 a3,*a4 sa3,a4
(A, [B, C, D, E])while s:f,*s sprint(f,s)A [B, C, D, E]
B [C, D, E]
C [D, E]
D [E]
E []参考文章
详解Python序列解包4
stack overflow
从一个例子看Python3.x中序列解包
GitHub python面试题