下一篇文章: Python实用技法第2篇:使用deque保留最新的N个元素
如今有一个包含N个元素的元组或序列,如今想将它分解为N个单独的变量。
在python中,任何序列、元组、可序列号对象,均可以经过一个简单的赋值操做来分解为单独的变量。python
惟一要求是变量的总数和结构要和序列的相吻合。若是不吻合就会报错segmentfault
实例展现:code
#将序列分解为单独的变量 m=(1,2) x,y=m print("x=",x) print("y=",y) print("*"*30) data=["mark",18,"超级帅",(1992,5,4)] name,age,feature,birthday=data print("name=",name) print("age=",age) print("feature=",feature) print("birthday=",birthday) print("*"*30) name,age,feature,(year,mon,day)=data print("name=",name) print("age=",age) print("feature=",feature) print("year=",year) print("mon=",mon) print("day=",day)
结果对象
x= 1 y= 2 ****************************** name= mark age= 18 feature= 超级帅 birthday= (1992, 5, 4) ****************************** name= mark age= 18 feature= 超级帅 year= 1992 mon= 5 day= 4
实际上不单单只是元组列表,只要对象是可迭代的,那么就能够执行分解操做,这包括字符串、文件、迭代器、生成器。字符串
实例展现:get
#将序列分解为单独的变量 mark="mark" m,a,r,k=mark print(m) print(a) print(r) print(k) print("*"*30) #有时候咱们想丢弃某个值,单因为变量数量必须和要分解的对象的可分解数量相同,此时咱们可使用_来表示要丢弃的值。 mark="mark" m,a,r,_=mark print(m) print(a) print(r) #其实_仍是一个变量,指示看起来舒服点 print(_)
结果:字符串处理
m a r k ****************************** m a r k
假如可序列号对象可分解为N个元素,难道咱们就要建立N个元素吗?若是N值很是大怎么办?
Python中的『*表达式』能够知足上述需求。例如,有无数个成绩列表:grades,如今想去掉第一个成绩和最后一个成绩,而后求剩下成绩的平均值:it
代码ast
import numpy as np grades=list(range(10))#定义一个0-999的分数列表 print("grades:"+str(grades)) first,*middle,last=grades print("middle:"+str(middle)) print("去掉第一个和最后一个分数后的平均值:"+str(np.mean(middle)))
结果email
grades:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] middle:[1, 2, 3, 4, 5, 6, 7, 8] 去掉第一个和最后一个分数后的平均值:4.5
固然这个【*表达式】能够位于第一个位置,也能够是最后一个,或者其它位置。
假若有一些用户记录,记录由姓名和电子邮件地址组成,后面跟着任意数量的电话号码:
record=('mark','1782980833@qq.com','18321859453','18956245389') name,email,*phone_numbers=record print(name) print(email) print(phone_numbers)
运行结果:
mark 1782980833@qq.com ['18321859453', '18956245389']
代码:
records=[ ('foo',1,2), ('bar','hello'), ('foo',3,4), ] def do_foo(x,y): print('foo',x,y) def do_bar(s): print('bar',s) for tag,*args in records: if tag=='foo': do_foo(*args) elif tag=='bar': do_bar(*args)
结果:
foo 1 2 bar hello foo 3 4
代码:
line='nobody:*:-2:-2:unp user:/var/empty:/user/nim/false' uname,*fileds,homedir,sh=line.split(':') print(uname) print(homedir) print(sh)
结果:
nobody /var/empty /user/nim/false
下一篇文章: Python实用技法第2篇:使用deque保留最新的N个元素