python之*的魔性用法
1. *在函数中的作用
聚合
在函数定义时聚合
def eat(args):
print('我请你吃:',args)
eat('蒸羊羔儿')
# 输出结果
# 我请你吃: 蒸羊羔儿
打散
在函数执行时打散
*arg打散的是 str tuple list
'alex' [1, 2, 3, 4] ('武sir', '太白', '女神',) 由这种打散变成('a', 'l', 'e', 'x', 1, 2, 3, 4, '武sir', '太白', '女神')
**wkargs打散的是 dict 两个字典变一个
func(中的两个表示只能打散字典,且打散后的只能传给kwargs)
用法:
dic1 = {'name':'太白','sex':'男'}
dic2 = {'age': 73,'hobby': '吹'}
l1 = [1,2,3]
def func(**kwargs):
print(args)
print(kwargs)
func(**dic1,**dic2)
打散目的
如果是传给*args就是将多个列表,或者字符,或者元组聚合成一个大的元组
如果打散后的是传给**kwargs就是将多个字典聚合一个大字典
s1 = 'alex'
l1 = [1, 2, 3, 4]
tu1 = ('武sir', '太白', '女神',)
def func(*args):
print(args)
func(*s1,*l1,*tu1)
# 输出结果
('a', 'l', 'e', 'x', 1, 2, 3, 4, '武sir', '太白', '女神')
# 对比:
以前是:'alex',[1, 2, 3, 4],('武sir', '太白', '女神',)
打散后是: ('a', 'l', 'e', 'x', 1, 2, 3, 4, '武sir', '太白', '女神')
练习题
l1 = [1, 2, 3]
l2 = ['太白', 'wusir', '景女神']
def func(*args,**kwargs):
print(args)
print(kwargs)
# func(l1,l2)
# func(*l1,*l2) # 当函数的执行时:*iterable 代表打散。
func(*[1, 2, 3],*(11,22),*'fdsakl')
dic2 = {'age': 73,'hobby': '吹'}
l1 = [1,2,3]
def func(*args,**kwargs):
print(args)
print(kwargs)
func(*l1,**dic2)
在函数以外还可以这样打散
分别赋值
a,b = (1,2)
print(a, b)
# 输出结果
1 2
a,*b = (1, 2, 3, 4,)
print(a, b)
# 输出结果
1 [2, 3, 4]
*rest,a,b = range(5)
print(rest, a, b)
# 输出结果
[0, 1, 2] 3 4
print([1, 2, *[3, 4, 5]])
# 输出结果
[1, 2, 3, 4, 5]
一句话总结
*arg打散的是 str tuple list
'alex' [1, 2, 3, 4] ('武sir', '太白', '女神',) 由这种打散变成('a', 'l', 'e', 'x', 1, 2, 3, 4, '武sir', '太白', '女神')
**wkargs打散的是 dict 两个字典变一个
用法
dic2 = {'age': 73,'hobby': '吹'}
l1 = [1,2,3]
def func(*args,**kwargs):
print(args)
print(kwargs)
func(*l1,**dic2)