*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) 这个顺序,否则程序会报错