风火编程--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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值