关于【组包与解包】: 组包:python解释器自动将多个数据组装到一个容器中 解包:将容器中的多个数据拆出来 组包: 解释器把1,2,3自动组包成一个元组,然后赋值给a,a的类型就是元组类型的 a = 1,2,3 # 相当于 a = (1,2,3) print(a) # (1, 2, 3) print(type(a)) # <class 'tuple'> #解包: 解释器会自动对元组(1,2)进行 解包,然后把1赋值给m,把2赋值给n,把3赋值给3 m,n,k = (1,2,3) # m=1,n=2,k=3 print(m) # 1 print(n) # 2 print(k) # 3 函数使用参数可以使函数变得更加通用,增加扩展性。参数的顺序有讲究,定义函数时,【形参顺序】 def func(位置参数,可变位置参数,默认参数,可变关键字参数): pass
解包:func(*args,**kwargs) 与 func(args,kwargs)返回的数据不同,* 或者**具有解包的作用,*用来将普通参数元组解开,**用来将关键字参数字典解开。**kwargs只能在调用函数时使用。 下面通过两个小例子帮助理解 1. def func1(*args ,**kwargs): print(args) # (10, 20) # ( (10, 20) , {'n': 30, 'm': 40}) print(kwargs) # {'n': 30, 'm': 40} def func2(* args ,** kwargs): #print(kwargs) # {'n': 30, 'm': 40} #解包:* args -> *(10,20)->10,20 #解包:** kwargs -> **{'n': 30, 'm': 40}-> n=30,m=40 #func1(args,kwargs) # func1( (10, 20) , {'n': 30, 'm': 40}) 结果为:((10, 20), {'n': 30, 'm': 40}) {} func1(*args,**kwargs) # func1( 10, 20 , n=30,m=40) 结果为:(10, 20) {'n': 30, 'm': 40} func2(10,20,n=30,m=40) # func2((10,20), {'n': 30, 'm': 40})
2. print(*a) # 解包 0 1 2 3 4 5 6 7
|