Python

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}

总结:

  1. *args 和 **kwargs 能使得函数接受可变数量的参数
  2. *args 代表了额外的位置参数,是一个元祖,**kwargs 代表了额外的关键字参数,是一个字典
  3. 实际上的关键语法是 * 和 **, args 和 kwargs 只是惯例而已。
原文地址:https://www.cnblogs.com/wwho/p/14457528.html