Python 中传入函数的参数主要分为关键字参数和位置参数(非关键字参数),看这篇博客
*args
就是用于传递可变长度的非关键字参数列表或元组;
**kwargs
就是用于传递可变长度的关键字参数字典。
看以下这个例子,我们定义了函数 myFun,它接收三个参数 arg1、arg2 和 arg3:
def myFun(arg1, arg2, arg3):
print("arg1:", arg1)
print("arg2:", arg2)
print("arg3:", arg3)
args = ["Geeks", "for", "Geeks"]
myFun(*args)
kwargs = {"arg1": "Geeks", "arg2": "for", "arg3": "Geeks"}
myFun(**kwargs)
输出为:
arg1: Geeks
arg2: for
arg3: Geeks
arg1: Geeks
arg2: for
arg3: Geeks
实际上就是先用列表 args 中的元素作为非关键字参数调用了一次函数,然后再用字典 kwargs 中的元素作为关键字参数调用一次函数。再看一个例子:
def myFun(*args, **kwargs):
print("args: ", args)
print("kwargs: ", kwargs)
myFun('geeks', 'for', 'geeks', first="Geeks", mid="for", last="Geeks")
输出为:
args: ('geeks', 'for', 'geeks')
kwargs: {'first': 'Geeks', 'mid': 'for', 'last': 'Geeks'}
函数 myFun 定义为先接收非关键字参数 args,再接收关键字参数 kwargs,所以在调用语句中,前三个字符串被看作是非关键字参数(args),后三个则被看作是关键字参数(kwargs)。注意关键字参数必须跟随在非关键字参数(位置参数)的后面。