风火编程--re.finditer, 等差数列count, 截取生成器takewhile,文件切片islice()

《流畅的python》读书笔记(七)

14.1 迭代
解释器需要迭代x时会调用iter(x), 返回一个迭代器, 如果对象没有实现了__iter__方法, iter()会调用__getitem__方法, , 如果两个方法都没有, 则x不是可迭代对象会抛出TypeError.

迭代器是指实现了__iter__和__next__方法的对象, __iter__方法应该返回self, 可以通过isinstance(abc.Iterator)判断迭代器.

迭代器通过捕捉StorpIteration异常结束迭代.

迭代器模式可以用来访问一个对象的内容而无需暴露他的内部表示.

可迭代对象是实现了__iter__而不实现__next__的对象.

函数的定义体中有yield关键字的,就是生成器.函数.
生成器函数的定义体执行完毕后也会抛出StopIteration异常.

惰性实现是指尽可能延迟生成值, 这样做既可以节省内存又可以避免可能无用的处理.

re.finditer 是 re.findall的惰性实现, 返回的是迭代器, 可以通过遍历或者next()取出MatchObject, 再通过group()取出匹配的字符串

import re
s = "123456123"
pattern = re.compile("1")
r = pattern.finditer(s)
m = next(r)
print(m)
print(m.group()

14.8 等差数列
无穷等差数列生成器

from itertools import count
gen = count(1, 2)
for i in range(10):
    print(next(gen))

有限等差数列生成器

from itertools import count, takewhile
gen = takewhile(lambda n: n<10, count(1, 2))
print(list(gen))

文件对象对的切片

wirh open("xx.txt", "r") as f:
    lines = islice(f, 3,5)
    print(lines)

你可能感兴趣的:(python进阶)