2018-01-03(第四章)
第四章 高级特性
1、切片
(1)对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。
>>> L = list(range(100))
>>>L[:10] #取前10个
>>>L[-10:] #取后10个
>>>L[10:20] #取11到20个
>>>L[:10:2] #前10个数,每2个取一个
>>>L[::5] #所有数,每5个取一个
(2)tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple。
(3)字符串'xxx'也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串。
2、迭代
如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。
(1)dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。
(2)如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断。
3、列表生成式
通过列表生成式,我们可以直接创建一个列表。
(1)>>> [x * x for x in range(1,11)]
(2)>>> [x * x for x in range(1,11) if x % 2 == 0]
(3)>>> [m + n for m in 'ABC' for n in 'XYZ' ]
4、生成器
在Python中,这种一边循环一边计算的机制,称为生成器:generator。
(1)方法一:只要把一个列表生成式的[]改成(),就创建了一个generator。
>>> g = (x * xforxinrange(10))
generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值
(2)方法二:
如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。
5、迭代器
(1)可迭代对象Iterable,可以直接作用于for循环的对象。一类是集合数据类型,如list、tuple、dict、set、str等;一类是generator,包括生成器和带yield的generator function。
可以使用isinstance()判断一个对象是否是Iterable对象。
(2)迭代器:Iterator,不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。如生成器。