Python 中的 *args 和 **kwargs 参数
*args 语法
使用 *args 语法,一个 python 函数可以在它的形式参数列表中声明接受零个或多个位置参数。 *args 将所有接收到的可变的位置参数组合到一个元组(tuple)里,这个元组可以在函数中访问。
# 形式参数示例
def function_with_many_arguments(arg1, *args):
print args
# 此函数中的`args`将成为传递的所有可变位置参数的元组,可以在函数中像使用元组一样使用。
function_with_many_arguments('fix arg1', 'hello', 123, True)
# >> ('hello', 123, True)
反过来,当*args 语法用在调用函数的实参列表时,它会将一个元组或列表的参数展开成一系列的位置参数。
# 实参示例
def function_with_3_parameters(num, boolean, string):
print "num is " + str(num)
print "boolean is " + str(boolean)
print "string is " + string
arg_list = [1, False, 'decorators']
# 通过使用'*'号 arg_list将会被展开为三个位置参数
function_with_3_parameters(*arg_list)
# >> num is 1
# >> boolean is False
# >> string is decorators
**kwargs语法
**kwargs 语法跟**args 相似,但是它是跟关键词参数相关而不是位置。如果 **kwargs 语法用在一个形式参数列表中,它将所有接收到的可变的关键词参数收集到一个字典中。
def function_with_many_keyword_args(name, age, **kwargs):
print kwargs
function_with_many_keyword_args('name', age=19, a='apples', b='bananas', c='cantalopes')
# >> {'a': 'apples', 'b': 'bananas', 'c': 'cantalopes'}
如果它用在一个函数的实参列表中。它将把一个字典扩展成一系统的关键词参数。
def multiply_name(count, name):
print name * count
arg_dict = {'count': 3, 'name': 'Brian'}
multiply_name(**arg_dict)
# >> BrianBrianBrian