Python 中的 *args 和 **kwargs
在 Python 中,*args 和 **kwargs 用于允许函数接受任意数量的参数。这些特性在设计需要处理可变数量输入的函数时提供了极大的灵活性。
代码示例:
# *args example
def fun(*args):
return sum(args)
print(fun(1, 2, 3, 4))
print(fun(5, 10, 15))
# **kwargs example
def fun(**kwargs):
for k, val in kwargs.items():
print(k, val)
fun(a=1, b=2, c=3)
输出:
10
30
a 1
b 2
c 3
下面我们深入探讨 *args 和 **kwargs:
Python 中用于传递多个参数的两个特殊符号是:
- *args(非关键字参数)
- **kwargs(关键字参数)
注意: 当我们不确定应该向函数传递多少参数时,可以使用“通配符”或“*”符号,例如 *args 或 **kwargs。
Python *args
在函数定义中,特殊语法 *args 用于将可变数量的参数传递给函数。它用于传递非关键字的、可变长度的参数列表。
例如,我们想创建一个乘法函数,它可以接受任意数量的参数并将它们全部相乘。这可以通过使用 *args 来实现。
使用 * 之后,与之关联的变量会变成可迭代的,这意味着你可以对它进行迭代操作,或者使用一些高阶函数,如 map 和 filter 等。
示例1:Python 程序用于说明 *args 用于可变数量的参数
def myFun(*argv):
for arg in argv:
print(arg)
myFun('Hello', 'Welcome', 'to', '架构笔记')
输出:
第一个参数:Hello
*argv 参数:Welcome
*argv 参数:to
*argv 参数:GeeksforGeeks
Python **kwargs
在函数定义中,特殊语法 **kwargs 用于传递可变长度的参数列表。我们使用双星号 ** 来表示 kwargs。
- 关键字参数是指在将变量传递到函数时,为其提供名称。
- 它会收集传递给函数的所有额外的关键字参数,并将它们存储在一个字典中。
示例2:Python 程序用于说明 **kwargs 用于可变长度的参数列表
def fun(**kwargs):
for k, val in kwargs.items():
print("%s == %s" % (k, val))
# 测试代码
fun(s1='Geeks', s2='for', s3='Geeks')
输出:
s1 == Geeks
s2 == for
s3 == Geeks
对于 s1='Geeks',s1 是键,'Geeks' 是值。简单来说,我们赋值的对象是值,而被赋值的对象是键。
在 Python 中同时使用 *args 和 **kwargs 调用函数
我们可以在同一个函数中同时使用 *args 和 **kwargs 来接受位置参数和关键字参数的混合。
在这个示例中,函数 fun 可以同时处理位置参数和关键字参数。args 参数将位置参数收集到一个元组中,而 kwargs 参数将关键字参数收集到一个字典中。
Python 中的 *args 和 **kwargs - 常见问题
(1)为什么要在 Python 中使用 *args 和 **kwargs?
*args 和 ***kwargs 允许函数接受可变数量的参数:
- *args(参数)允许你将可变数量的位置参数传递给函数。
- **kwargs(关键字参数)允许你将可变数量的关键字参数(键值对)传递给函数。
(2)Python 中 *args 和 **kwargs 的区别是什么?
*args 将额外的位置参数收集到一个元组中,而 **kwargs 将额外的关键字参数收集到一个字典中。
(3)Python 中 *args 是列表还是元组?
*args 将额外的位置参数收集到一个元组(tuple)中,而不是列表。可以通过元组索引和迭代来访问这些参数。
(4)如何传递 **kwargs?
要将关键字参数(**kwargs)传递给函数,你需要在调用函数时提供键值对。
def example_function(**kwargs):
print(kwargs)
example_function(name='Alice', age=30)
输出:
{'name': 'Alice', 'age': 30}
在函数内部,kwargs 是一个包含传递的关键字参数的字典。