📅  最后修改于: 2023-12-03 15:09:43.342000             🧑  作者: Mango
在Python中,我们可以定义不确定数量的参数,包括位置参数和关键字参数。这些参数被称为可变长度参数。其中,*args
被用来传递不确定数量的位置参数,而**kwargs
被用来传递不确定数量的关键字参数。下面我们将详细介绍这两种可变长度参数的使用方法。
可变长度的位置参数用*args
来表示。这种参数将会接受多个任意位置参数,并将它们打包成一个元组(tuple)。例如:
def my_sum(*args):
total = 0
for num in args:
total += num
return total
print(my_sum(1, 2, 3)) # 输出6
print(my_sum(1, 2, 3, 4)) # 输出10
在上面的例子中,*args
接受任意个参数,并打包成一个元组,代表着1,2,3或1,2,3,4。使用for循环将args中的所有元素相加。
可变长度的关键字参数用**kwargs
来表示。这种参数将会接受任意个关键字参数,并将它们打包成一个字典(dict)。例如:
def my_dict(**kwargs):
my_dict = {}
for k, v in kwargs.items():
my_dict[k] = v
return my_dict
print(my_dict(a=1, b=2, c=3)) # 输出{'a': 1, 'b': 2, 'c': 3}
在上面的例子中,**kwargs
接受任意个关键字参数,并将它们打包成一个字典(dict),代表着{'a': 1, 'b': 2, 'c': 3}。我们使用for循环将kwargs中的键值对添加到一个新创建的空字典中。
可以同时在函数定义中使用*args
和**kwargs
,在这种情况下,位置参数必须在关键字参数的前面。例如:
def my_func(foo, bar, *args, **kwargs):
# 使用位置参数foo和bar
print('foo:', foo)
print('bar:', bar)
# 使用位置参数之后的位置参数
for i, arg in enumerate(args):
print('arg{}:'.format(i), arg)
# 使用关键字参数
for k, v in kwargs.items():
print('kwarg{}:'.format(k), v)
# 测试myfunc
my_func('Hello', 'world', 101, 202, 303, a=1, b=2, c=3)
输出:
foo: Hello
bar: world
arg0: 101
arg1: 202
arg2: 303
kwarga: 1
kwargb: 2
kwargc: 3
在上面的例子中,我们首先使用了两个位置参数:foo
和bar
。然后我们使用了*args
来接受101,202和303,使用for循环遍历元组中的所有元素。最后,我们使用**kwargs
来接受关键字参数a,b和c,遍历字典中的所有键值对。
在大多数情况下,我们稍微困惑这两个可变长度参数在实际中的使用,但是,在编写接口文档或者重载已经存在的代码时,就会使用到这两个可变长度参数的功效了。