python中的装包与拆包

1.*args

def test1(a, *args):
# 输出第一个参数a
print(a)
# args是一个元组,里面包括除了第一个参数以外的无名参数
print(args)
# *args是将args元组的每一个元素分别拿出来,然后依次打印
print(*args)


test1(1, 2, 3, 4, 5)
print()  # 增加分割行
test1(7, (6, 5, 4, 3))

运行结果如下:

1
(2, 3, 4, 5)
2 3 4 5

7
((6, 5, 4, 3),)
(6, 5, 4, 3)

由此可见:args是一个元组类型,而在形参中*args代表可以接收多余的无名参数,而在实参中,*args代表将元组拆包,拆分成单个数据来使用。如果给支持参数是元组类型的函数传递一个元组,那么这个函数会把元组当做一个单独的数据存入到元组中去,拆包的过程和普通数据一样。这种可以传不定长参数的函数,可以只传参数a,因为它是必须的,后面的*args可以传递也可以不传递。

2.**kwargs

def test1(a, **kwargs):
# 输出第一个参数a
print(a)
# akwrgs是一个字典,里面包括除了第一个参数以外的有名参数
print(kwargs)
# **kwargs是将kwargs字典的每一个元素分别拿出来,一次还原成m=100,n=2
#但是**kwargs不支持打印出来
# print(**kwargs)
#对**kwargs进行拆包
test2(**kwargs)

def test2(m,n):
    print(m,n)

test1(1,m=100,n=2)

输出结果为:

1
{'m': 100, 'n': 2}
对**kwargs进行拆包
100 2

总结:

*args作为形参是用来接收多余的未命名参数,而**kwargs是用来接收key=value这种类型的命名参数,args是元组,kwargs是字典。装包就是把未命名的参数放到元组中,把命名参数放到字典中。拆包就是还原最初传进来的数据样貌。

猜你喜欢

转载自blog.csdn.net/weixin_40612082/article/details/80572066
今日推荐