Python不定长参数 *args 和 **kwargs
args的全称是arguments -- 参数
kwargs的全称是keyword arguments -- 关键字参数
*args:
前面加个 * ,表示为可变参数,其中 * 是规定的,args可用其他名称替换,但一般习惯用 args 来表示。可变参数在传入函数后,被封装成一个 tuple 来进行使用。
*args举例:
例1:
def numbers(*args):
print(type(args)) # tuple
for n in args:
print(type(n)) # int
numbers(1, 2, 3, 4)
例2:
def function(x, y, *args):
print(x, y, args)
function(1, 2, 3, 4, 5)
结果:
1 2 (3, 4, 5)
用*args定义就可以引入,相当于定义了不定长度的函数,然后在程序中就可以多次使用。
**kwargs :
是一个字典,传入的参数以键值对的形式存放到字典里。
关键字参数使用 kwargs 来标识,是规定,而kwargs可替换,它将不定长参数转换为 dict 传入函数。
**kwargs举例:
例1:
def name(**kwargs):
print(kwargs)
name(a = 1, b = 2, c = 3)
name(a = 1, b= 2, c = 3, d = 4)
结果:
{'a': 1, 'b': 2, 'c': 3}
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
例2:
def foo(x, **kwargs):
print(x, kwargs)
foo(1, y = 1, a = 2, b = 3, c = 4)#将y=1,a=2,b=3,c=4以字典的方式给了kwargs
结果:
1 {'y': 1, 'a': 2, 'b': 3, 'c': 4}
总结:
- *args 和 **kwargs 能使得函数接受可变数量的参数
- *args 代表了额外的位置参数,是一个元祖,**kwargs 代表了额外的关键字参数,是一个字典
- 实际上的关键语法是 * 和 **, args 和 kwargs 只是惯例而已。