*运算符的使用

1.可变数量参数

在我们查阅函数的说明文档时,经常会见到这样的参数:*args,**kwargs

比如matplotlib中的plot函数:plot(*args, scalex=True, scaley=True, data=None, **kwargs)

在定义函数时,通过在参数前增加星号*定义可变数量参数。在调用时它们被当作元组类型传入函数。

**则表示将传入的参数放入名为kwargs的字典中。这一方法经常用于指定函数的特征参数。

可变数量参数必须放在必选参数后。

def fun0(a,*b,**c):
    print(type(b))
    for i in b:
        a+=i
    print(type(c))
    print(c.items())
    return a
print(fun0(1,2,3,4,name="libeiqun",age=40))

'''
<class 'tuple'>
<class 'dict'>
dict_items([('name', 'libeiqun'), ('age', 40)])
10
'''

作为函数的实参也是可以的。这是一回事。

def fun1(a,b,c):
    return a,b,c
print(fun1(*[4,7,8]))#解包后分别赋给a b c

'''
(4, 7, 8)

'''

 

2.解包可迭代对象

任何可迭代对象都可以通过简单的赋值进行解包。(列表,元组,字符串,迭代器,生成器)

a,b=(4,5)
name,sex,height,(m,y,e)=["libq","fale",1.7,(7,8,5)]

当我们只想解压一特定的部分,或者不确定个数的可迭代对象的时候,星号表达式可以帮助我们解决这个问题。

record=("Jack","1","A","B","C","D")
name,authority,*management=record
print(type(management))#需要注意的是,通过这种方法解压出的变量一定是列表类型。
print(management)

'''
<class 'list'>
['A', 'B', 'C', 'D']
'''

record=[4,5,6,8,7]
*before,last=record#用在列表的开头
print(before)

'''
[4, 5, 6, 8]
'''

record="lib.numpy.random.randant"
before,*middle,last=record.split(".")
print(middle)

'''
['numpy', 'random']
'''
posted @ 2021-10-16 23:11  zeroy610  阅读(143)  评论(0编辑  收藏  举报