Python中的*args和**kwargs

发布时间 2024-01-11 17:41:37作者: ishuangjin

定义

  1. *args和**kwargs是编程人员约定的变量名字,args 是 arguments 的缩写,表示位置参数;kwargs 是 keyword arguments 的缩写,表示关键字参数。
  2. 这其实就是 Python 中可变参数的两种形式, 并且 *args 必须放在 **kwargs 的前面, 因为位置参数在关键字参数的前面
  3. *args和**kwargs长度可变, 可以为0

实例

def func(*args, **kwargs):
    print(args, type(args))
    print(args[1])
    print(kwargs, type(kwargs))
    print(kwargs.get('c'))

func('a', [1, 2, 'a'], c='c', d='d')
('a', [1, 2, 'a']) <class 'tuple'>
[1, 2, 'a']
{'c': 'c', 'd': 'd'} <class 'dict'>
c

可以理解为有两个参数分别是:
args=('a', [1, 2, 'a'])
kwargs={'c': 'c', 'd': 'd'}
然后对其进行了解包操作之后传入函数, 也就是*和**

解包

把容器类型list、tuple、dict、set中的元素拆开
**{'c': 'c', 'd': 'd'}就是拆成'c'='c'和'd'='d'两个元素
*('a', [1, 2, 'a']) 就是拆成 'a' 和 [1, 2, 'a'] 两个元素
当然还能接着拆[1, 2, 'a']这个元素,*('a', *[1, 2, 'a'])拆成'a' 、1、2、'a'四个元素
在上面的例子中
func('a', [1, 2, 'a'], c='c', d='d')与func(*('a', [1, 2, 'a']), **{'c': 'c', 'd': 'd'})可以近似理解为等价