Python(4)高级特性 总结

 

Python中很多常见语法可以使程序更加简洁易读,这里我们介绍5个例子:切片、迭代、列表生成器、生成器、迭代器

1.切片(slice)

切片用于取list tuple中部分元素,通过下标索引,只需标出想得到的第一个元素下标和最后一个元素

  • L[a:b] 从a开始取,到(b-1)为止,取(a-b)个元素
  • 若a=0,则可以省略L[:b]
  • 支持倒数切片。L[-a:-b],从倒数第a开始取,到倒输(b+1)为止,取(a-b)个元素;                                                                                         L[-a:],    从倒数第a开始取,到最后一个元素为止,取a个元素
  • L[:]复制原list或tuple
  • 支持跳着取元素,例如前10个数,每两个取一个:L[:10:2] ;所有数,每5个取一个:L[::5]
  • 字符串可以看作是list,也支持切片
  • tuple不可变,切片后得到类型仍是tuple,但是是一个新的tuple,原tuple不变

2.迭代

迭代指通过for ... in遍历整个list或tuple

  • 任何可迭代对象都可以作用于for循环
  • 可直接用for循环的有两类:一类是集合数据类型,如listtupledictsetstr等;                                                                                                            一类是generator,包括生成器和带yield的generator function
  • dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。
  • 默认情况下,dict迭代的是key。                                                                                                                                              迭代value  : for value in d.values()                                                                                                                                             同时迭代key和value : for k,v in d.items()
  • list可以通过enumerate函数变成索引-函数对                                                                                                                              for i, value in enumerate(['A', 'B', 'C'])
  • 可以用collections模块的Iterable类型判断是否为可迭代对象                                                                                                       from collections import Iterable                                                                                                                                               isinstance('abc' , Iterable)
  • for 循环可以同时引用两个变量

 

3.列表生成器

  • list( range(1,11) )
  • [x*x for x in range (1,11)]
  • [x*x for x in range (1,11) if x%2 ==0]
  • [m+n for m in 'abc' for n in '123']

 

4.生成器(generator)

列表里的元素事先并不知道,需要通过循环不断推算出后一个元素

  • 与列表生成式相同用法,只需要把[]改成()即可,就从list变成generator
  • 生成器计算到最后一个元素,没有更多元素时抛出StopIneration错误
  • 一般用for循环得到后面元素,但是算法复杂时也可以通过函数实现
  1. 函数定义中含有yield关键字即为generator  
  2. generator函数遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行,即,generator函数一般在for循环中调用
  3. 如果想得到generator函数的返回值,,必须捕获StopIteration错误,返回值包含在StopIterationvalue

5.迭代器(Iterator)

Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,

  • 可以直接作用于for循环的对象统称为可迭代对象Iterable。可以使用isinstance()判断一个对象是否是Iterable对象
  • 可以被next()函数调用并不断返回下一个值的对象称为迭代器Iterator。可以使用isinstance()判断一个对象是否是Iterator对象
  • 生成器都是Iterator对象,但listdictstr虽然是Iterable,却不是Iterator
  • listdictstrIterable变成Iterator可以使用iter()函数

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值