Python中的可变参数函数:*args和**kwargs的使用方法
Python中可以使用*和**进行可变参数的函数定义,称为不定长参数。*args 用于传递一个任意多个参数的列表,而 **kwargs 则允许我们将不定长度的键值对,作为参数传入函数中。
在开发Python程序时,我们通常会遇到以下两种情形:
1. 函数需要传递参数,但是参数数量无法预先确定;
2. 函数需要传递多个参数,并且这些参数都是键值对的形式。
这时,我们就可以使用 *args 和 **kwargs 来实现上述要求,从而达到适应不同场景要求的目的。
在介绍使用方法前,需要注意以下几点:
1. 当使用 *args 和 **kwargs 时,函数定义中应该优先放置这两个参数。
2. 在函数定义中,参数的顺序应该为:普通参数、*args 和 **kwargs。
下面分别介绍使用方法:
*args 的使用方法
在函数定义中,使用一个星号 * 来收集多余的位置参数。这些参数将被包装成一个元组(tuple)类型,在函数程序块中可以使用:
def func(*args):
for i in args:
print(i)
func(1, 2, 3, 4, 5)
#输出:
#1
#2
#3
#4
#5
如果 *args 没有传入任何参数,那么它将是一个空元组。
**kwargs 的使用方法
在函数定义中,使用两个星号 ** 来收集多余的关键字参数。这些参数将被包装成一个字典(dictionary)类型,在函数程序块中可以使用:
def func(**kwargs):
for key, value in kwargs.items():
print(f'{key} : {value}')
func(food='spam', quantity=10, price=100000)
#输出:
#food : spam
#quantity : 10
#price : 100000
示例说明了如何使用关键字参数和 **kwargs。当我们使用 ** 号传递参数时,Python 将其打包为字典,并将其传递给函数。函数通过 dictionary.items() 方法来迭代字典中的 key-value 对。
习惯上,我们不使用省略号来表示未列出的参数,而是使用 **kwargs 来代替。有时,一个函数可能需要混合和匹配这两种参数类型。
混合和匹配 *args 和 **kwargs
可以使用*args 和 **kwargs来使函数可变参数更灵活。在函数定义中,使用一个 * 和一个 ** 来同时接受位置参数和关键字参数:
def func(*args, **kwargs):
for arg in args:
print(arg)
for key, value in kwargs.items():
print(f'{key} : {value}')
func(1, 2, 3, food='spam', quantity=10, price=100000)
#输出:
#1
#2
#3
#food : spam
#quantity : 10
#price : 100000
当我们添加 *args 和 **kwargs 两个参数时,函数定义就变得更加灵活和自由了,因为你现在可以接受任意数量和任意类型的参数。
总结:
不定长参数在 Python 中可以让函数定义更加灵活和自由。 *args 允许传递任意数量的位置参数, **kwargs 允许传递任意数量的关键字参数。当这两种类型一起使用时,Python 可以接受任意数量和任何类型的参数,从而更好地适应不同的开发需求。
