Python中的*args和**kwargs

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

定义

  1. *args**kwargs是编程人员约定的变量名字,argsarguments 的缩写,表示位置参数;kwargskeyword 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'12'a'四个元素
在上面的例子中
func('a', [1, 2, 'a'], c='c', d='d')func(*('a', [1, 2, 'a']), **{'c': 'c', 'd': 'd'})可以近似理解为等价