**args和 **kwargs是什么?
**kwargs 是一个惯用的命名,指代一个字典(dictionary),其中包含了所有未在函数定义中明确指定的关键字参数。在 Python 中,函数的参数可以分为两类:位置参数(positional arguments)和关键字参数(keyword arguments)。
- √位置参数:按照函数定义的顺序传递给函数的参数。(下面示例:全部打印)
- √关键字参数:以
key=value
形式传递给函数的参数。(下面示例:按照key=value
的形式打印)
√当我们不确定传入函数的参数个数时,可以使用 *args
和 **kwargs
来处理变长参数:
*args
用于传递非关键字的变长参数列表(位置参数)。**kwargs
用于传递关键字参数的变长参数字典。
**args例子
当我们使用 *args
时,我们可以处理不定数量的位置参数。这些位置参数会被打包成一个元组(tuple),可以在函数内部进行迭代或者按需处理。下面是一个简单的示例代码:
def print_args(*args):for arg in args:print(arg)# 调用函数,传入不定数量的位置参数
print_args('Hello', 'World', 'Python', 'Programming')
输出结果会依次打印每个传入的位置参数:
Hello
World
Python
Programming
在这个例子中,print_args
函数使用了 *args
接收不定数量的位置参数,并通过 for
循环遍历打印出每一个参数的值。
要注意的是,*args
只能用于接收位置参数,而不能用于接收关键字参数。
**kwargs例子
例如,定义一个函数 example_func
:
def example_func(arg1, arg2, **kwargs):print("arg1:", arg1)print("arg2:", arg2)print("kwargs:", kwargs)
在这个例子中,arg1
和 arg2
是位置参数,而 **kwargs
则可以接收任意数量的关键字参数。例如,调用函数 example_func
:
example_func(1, 2, option1='value1', option2='value2')
输出将会是:
arg1: 1
arg2: 2
kwargs: {'option1': 'value1', 'option2': 'value2'}
因此,**kwargs 并不是指关键字参数本身,而是一个用于接收所有未明确指定的关键字参数的字典。