python args和kwargs

两段不同的代码,为什么args和kwargs的output格式有很大区别

```python
def combiner(a, b, *args, **kwargs):
    super_combiner(args, kwargs)

def super_combiner(*args, **kwargs):
    print('my_args:', args)
    print('my_kwargs', kwargs)

combiner(10, '20', 40, 60, 30, argument1=50, argument2='66')
"""
output:
my_args: ((40, 60, 30), {'argument1': 50, 'argument2': '66'})
my_kwargs {}
"""

def test2(x,*args,**kwargs):
    print("x: ", x)
    print("args:",args)
    print("kargs:",kwargs)
    return
 
test2(1,2,a=1, b=2, c=3)
"""
output:
x:  1
args: (2,)
kargs: {'a': 1, 'b': 2, 'c': 3}
"""

```

第一段执行super_combiner传入的args,kwargs是2个变量值,会被args接受,已经不是关键字参数,所以打印出来是题主那样没问题
第二段test2时,打印的是args是可变参数和关键字参数

题主具体可以参考下面的文章:

5、多值参数
当函数需要处理的参数个数不确定时,可使用 多值参数。

python 中有两种多值参数:

接收 元组:参数名前加 一个 *
接收 字典:参数名前加 两个 *
一般在给多值参数命名时,习惯使用以下两个名字

*args — 存放 元组 参数
**kwargs — 存放 字典 参数,(kw 即 keyword,kwargs 即 键值对参数)

def demo(num, *args, **kwargs):

print(num)
print(args)
print(kwargs)

demo(1, 2, 3, 4, 5, name="小明", age=18, gender=True)

输出:
1
(2, 3, 4, 5)
{'name': '小明', 'age': 18, 'gender': True}
1
2
3
4
5
6
7
8
9
10
11
12
拆包

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632这篇文章:Python中*args和**kwargs 也许有你想要的答案,你可以看看