在编程中,我们定义一个函数来创建可重用的代码,它执行类似的操作。为了执行该操作,我们使用特定值调用函数,此值在 Python 中称为函数参数。
我们建议您阅读 Python 函数 和 Python 函数参数。
假设我们定义了一个函数来添加 3 个数字。
示例 1:添加 3 个数字的函数
def adder(x,y,z):
print("sum:",x+y+z)
adder(10,12,13)
当我们运行上述程序时,输出将是
sum: 35
在上面的程序中,我们有一个 adder()
函数,带有三个参数 x、y 和 z。当我们调用 adder()
函数时传入三个值,我们将得到 3 个数字的总和作为输出。
让我们看看当我们在 adder()
函数中传入超过 3 个参数时会发生什么。
def adder(x,y,z):
print("sum:",x+y+z)
adder(5,10,15,20,25)
当我们运行上述程序时,输出将是
TypeError: adder() takes 3 positional arguments but 5 were given
在上面的程序中,我们向 adder()
函数传递了 5 个参数而不是 3 个参数,因此我们得到了 TypeError
。
Python 中 *args 和 **kwargs 的介绍
在 Python 中,我们可以使用特殊符号向函数传递可变数量的参数。有两个特殊符号
- *args(非关键字参数)
- **kwargs(关键字参数)
当不确定要向函数传递的参数数量时,我们使用 *args 和 **kwargs 作为参数。
Python *args
如上例所示,我们不确定可以传递给函数的参数数量。Python 有 *args,它允许我们向函数传递可变数量的非关键字参数。
在函数中,我们应该在参数名前使用星号 *
来传递可变长度参数。参数作为 元组 传递,这些传递的参数在函数内部形成一个与参数名(不包括星号 *
)相同的元组。
示例 2:使用 *args 将可变长度参数传递给函数
def adder(*num):
sum = 0
for n in num:
sum = sum + n
print("Sum:",sum)
adder(3,5)
adder(4,5,6,7)
adder(1,2,3,5,6)
当我们运行上述程序时,输出将是
Sum: 8 Sum: 22 Sum: 17
在上面的程序中,我们使用 *num 作为参数,它允许我们向 adder()
函数传递可变长度参数列表。在函数内部,我们有一个循环,它添加传递的参数并打印结果。我们向函数传递了 3 个不同长度的元组作为参数。
Python **kwargs
Python 使用 *args 向函数传递可变长度的非关键字参数,但我们不能用它来传递关键字参数。对于这个问题,Python 有一个解决方案,叫做 **kwargs,它允许我们向函数传递可变长度的关键字参数。
在函数中,我们在参数名前使用双星号 **
来表示此类参数。参数作为字典传递,这些参数在函数内部形成一个与参数名(不包括双星号 **
)相同的字典。
示例 3:使用 **kwargs 将可变关键字参数传递给函数
def intro(**data):
print("\nData type of argument:",type(data))
for key, value in data.items():
print("{} is {}".format(key,value))
intro(Firstname="Sita", Lastname="Sharma", Age=22, Phone=1234567890)
intro(Firstname="John", Lastname="Wood", Email="[email protected]", Country="Wakanda", Age=25, Phone=9876543210)
当我们运行上述程序时,输出将是
Data type of argument: <class 'dict'> Firstname is Sita Lastname is Sharma Age is 22 Phone is 1234567890 Data type of argument: <class 'dict'> Firstname is John Lastname is Wood Email is [email protected] Country is Wakanda Age is 25 Phone is 9876543210
在上面的程序中,我们有一个 intro()
函数,参数为 **data。我们向 intro()
函数传递了两个具有可变参数长度的字典。我们在 intro()
函数内部有一个 for 循环,它处理传递的字典的数据并打印字典的值。
注意事项
- *args 和 **kwargs 是特殊关键字,允许函数接受可变长度的参数。
- *args 传递可变数量的非关键字参数,并可对其执行元组操作。
- **kwargs 传递可变数量的关键字参数字典给函数,并可对其执行字典操作。
- *args 和 **kwargs 使函数更灵活。