0%

*args 和 **kwargs

很多Python新手都无法搞清*args**kwargs这两个魔术变量。那么他们到底是什么呢?让我来告诉你。在实际程序中,我们没有必要非得写成*args**kwargs这样的形式,你也可以写成*var**vars。写成*args**kwargs的形式只是一种惯例。 ## *args的用法 *args**kwargs主要用于函数的定义。*args**kwargs允许你将可变数量的参数传递给函数。这里的可变意味着你事先是不知道用户可以向你传递多少参数。因此在这种情况下你可以使用这两个关键字。*args用于向函数发送没有关键字的可变长度参数列表。以下是一个例子:

1
2
3
4
5
6
def test_var_args(f_arg, *args):
print("first normal arg: ", f_arg)
for arg in args:
print("another arg through *args: ", ar)

test_var_args('a', 'b', 'c', 'd')

这会产生以下结果:

1
2
3
4
first normal arg: a
another arg through *args: b
another arg through *args: c
another arg through *args: d

**kwargs

kwargs允许你将键值对[也就是字典形式的参数]的可变长度的参数传递给函数。如果要在函数中处理命名参数,则应该使用**kwargs,下面是一个例子:

1
2
3
4
5
6
def greet_me(**kwargs):
for key, value in kwargs.items():
print("{0} = {1}".format(key, value))

>>> greet_me(name="oliverxu")
name = oliverxu

使用*args*kwargs来调用函数

首先我们先定义一个函数:

1
2
3
4
def test_args_kwargs(arg1, arg2, arg3):
print("arg1:", arg1)
print("arg2:", arg2)
print("arg3:", arg3)

现在,可以用*args**kwargs来将参数传递给这个函数:

1
2
3
4
5
6
7
8
9
10
11
>>> args = ("two", 3, 5)
>>> test_args_kwargs(*args)
arg1: arg1
arg2: arg2
arg3: arg3

>>> kwargs = {"arg3":3, "arg2": "two", "arg1": 5}
>>> test_args_kwargs(**kwargs)
arg1: 5
arg2: two
arg3: 3
If you like my blog, please donate for me.