什么是Python中的 ** (双星号) 和 * (星号) 参数?
在Python中,双星号(**)和星号(*)参数都是非常常见的。它们可以用于函数定义和调用,并且能够在很多场合提高代码的灵活性和可读性。
阅读更多:Python 教程
星号参数
首先我们来讲一下星号参数。星号参数通常用于传递可变数量的参数,在函数定义时,星号参数把传递进来的所有非关键字参数放入一个元组中,通过这个元组就可以访问所有这些参数。
例如:
def example_func(a, b, *args):
print(a, b)
for arg in args:
print(arg)
example_func(1, 2, 3, 4, 5)
输出结果为:
1 2
3
4
5
在上面的例子中,函数example_func()定义了三个参数:a、b和args。实际上,函数在接收到3、4和5这三个参数时,它将它们全部存入了一个元组中,这个元组被赋值给了args。因此,在函数内部,我们可以通过args这个元组访问到所有这些参数。
除了在函数定义时使用星号参数之外,还可以在函数调用时也可以使用星号参数,例如:
def example_func(a, b, c):
print(a, b, c)
args = (1, 2, 3)
example_func(*args)
输出结果为:
1 2 3
在上面的例子中,我们创建了一个元组args,包含了三个元素。然后我们通过在函数调用时使用星号参数,把元组中的每个元素拆分开来分别传递给函数example_func(),所以最终输出了元组中的三个元素。
双星号参数
接下来,我们来看一下双星号参数。双星号参数通常用于传递可变数量的关键字参数,在函数定义时,双星号参数把传递进来的所有关键字参数放入一个字典中,通过这个字典就可以访问所有这些参数。
例如:
def example_func(a, b, **kwargs):
print(a, b)
for key, value in kwargs.items():
print(key, value)
example_func(1, 2, c=3, d=4, e=5)
输出结果为:
1 2
c 3
d 4
e 5
在上面的例子中,函数example_func()定义了三个参数:a、b和kwargs。实际上,在函数接收到传递进来的c、d和e这三个关键字参数时,它将它们全部存入了一个字典中,这个字典被赋值给了kwargs。因此,在函数内部,我们可以通过kwargs这个字典访问到所有这些参数。
除了在函数定义时使用双星号参数之外,还可以在函数调用时也可以使用双星号参数。例如:
def example_func(a, b, c):
print(a, b, c)
kwargs = {'a': 1, 'b': 2, 'c': 3}
example_func(**kwargs)
输出结果为:
1 2 3
在上面的例子中,我们创建了一个字典kwargs,包含了三个关键字参数:a、b和c。然后我们通过在函数调用时使用双星号参数,把字典中的每个键值对拆分开来分别传递给函数example_func(),所以最终输出了字典中的三个键值对。
结论
在Python中,星号和双星号参数都是非常有用的工具。它们可以让我们更方便地处理可变数量的参数,提高函数的灵活性和可读性。在定义和调用函数时,我们根据需求可以选择使用星号或双星号参数,从而更加高效地完成我们的代码编写。