*运算符的使用
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']
'''