Python *args & **kwargs

*args

*args是可变的positional arguments列表

*args:将参数打包成元组(tuple)给函数调用

在函数中用 args 调用

def test1(*args):
    print(args)
    print(*args)
    test2(args)
    test2(*args)


def test2(*args):
    print(args)


if __name__ == '__main__':
    test1('a', 'b', 'c')

输出结果

('a', 'b', 'c')
a b c
(('a', 'b', 'c'),)
('a', 'b', 'c')

所以 *args 是 3 个字符串:'a', 'b', 'c'
args 是装着这 3 个字符串的元祖:('a', 'b', 'c')

**kwargs

**kwargs是可变的keyword arguments列表
**kwargs:将参数打包成字典(dict)给函数调用
在函数中用 kwargs 调用
示例:

def test1(**kwargs):
    print(kwargs)
    test2(kwargs=kwargs)
    test2(**kwargs)


def test2(**kwargs):
    print(kwargs)


if __name__ == '__main__':
    test1(a='a', b='b', c='c')

输出结果

{'a': 'a', 'b': 'b', 'c': 'c'}
{'kwargs': {'a': 'a', 'b': 'b', 'c': 'c'}}
{'a': 'a', 'b': 'b', 'c': 'c'}

所以 **kwargs = {a='a', b='b', c='c'}
注意 **kwargs 并不能直接 print 出来
kwargs = {'a': 'a', 'b': 'b', 'c': 'c'}

总结

当函数内部调用其他以 *args 或 **kwargs 为参数的函数时,传入的参数应当为 *args 或 **kwargs 而不是 args 或 kwargs
参数arg、*args、**kwargs三个参数的位置必须是一定的。必须是 (arg, *args, **kwargs) 这个顺序,否则程序会报错

原文地址:https://www.cnblogs.com/dbf-/p/11606188.html