首页 > 技术文章 > python之*的魔性用法

zanao 原文

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)

推荐阅读