并不是必须写成 *args**kwargs

只有变量前面的 *(星号)才是必须的。 你也可以写成*var**vars 。而写成 *args**kwargs 只是一个通俗的命名约定。


*args 表示可变数量(≥0)的非键值对参数。(任意长度的列表)

**kwargs 表示可变数量(≥0)的键值对(关键字)参数。(任意长度的字典)


用法:

1.可使用 *args**kwargs 来定义函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 使用 *args 定义函数
def test_args_1(*args):
for arg in args:
print(arg)

test_args_1('ni','hao')
# test_args_1() 可传入任意(≥0)个参数


# 使用 **kwargs 定义函数
def test_kwargs_1(**kwargs):
print(kwargs)

test_kwargs_1(ni='1', hao='2’)
# 可传入任意(≥0)个键值对参数

2.可使用 *args 和 **kwargs 来调用函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 使用 *args 调用函数
def test_args_2(a,b,c):
print(a,b,c)

abc = [1,2,3]
test_args_2(*abc)
# 把列表以 *args 方式传入函数


# 使用 **kwargs 调用函数
def test_kwargs_2(a,b,c):
print(a,b,c)

abc = {'c':1, 'b':2, 'a':3}
test_kwargs_2(**abc)
# 把列表以 **kwargs 方式传入函数
# 输出:
3 2 1

鸣谢:

怎样使用*args 和 **kwargs - 《Python 进阶》

Use of *args and **kwargs - stackoverflow

函数的参数 - 廖雪峰

理解 Python 中的 *args 和 **kwargs