如何用最快的速度读出大小为10G的文件的行数?弄…
2018-11-13 07:33:44来源:博客园 阅读 ()
1 with open('rm_keys.txt', 'r', encoding = 'utf-8') as f: 2 3 count = 0 4 5 for line in f: 6 7 count += 1 8 9 print(count)
for line in f 将文件对象 f 视为一个可迭代的数据类型,会自动使用 IO 缓存和内存管理,这样就不必担心大文件了。
一、先理解可迭代对象的本质
随便封装了一个可以存放多条数据的类型是不能迭代的——需要添加了__iter__方法。
可迭代对象的本质就是提供一个这样的中间“人”即迭代器,帮助我们对其进行迭代遍历使用。
可迭代对象是一个具备了__iter__方法的对象,通过__iter__方法获取可迭代对象的迭代器。
二、跌代器好处:实时生成数据,节省内存
三、迭代器的作用:具体指定下一个数据
四、如何使用迭代器
先获取迭代器:[可迭代对象].__iter__()
再用next()函数来获取下一个元素
五、判断是否是迭代器:
from collection import Iterator
isinstance(对象,Iterator)
判断的依据是有没有__iter__()方法和__next__()方法
六、for...in...循环的本质
先得到这个可迭代对象的迭代器iter(对象)
使用while循环不断得遍历下一个值next(迭代器)
直到遍历到已经没有下一个值了(会报异常StopIteration)
退出循环
七、举个例子
数学中有个著名的斐波拉契数列(Fibonacci)
数列中第一个数为0,第二个数为1
其后的每一个数都可由前两个数相加得到:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
现在我们先通过for...in...循环来遍历迭代斐波那契数列中的前n个数:
class Fib(object): def __iter__(self): return self def __next__(self): pass fib = Fib() for i in fib: print(i) # 一次性的到结果:0, 1, 1, 2, 3, 5, 8, 13....
这个斐波那契数列我们可以用迭代器来实现,
每次迭代都通过数学计算来生成下一个数。
使用迭代器的形式实现:
class Fib(object): def __init__(self, num): self.num = num # 表示前n项 self.a = 0 # 前一个值 self.b = 1 # 后一个值 self.i = 0 # 次数 def __iter__(self): return self def __next__(self): if self.i < self.num: ret = self.a self.a, self.b = self.b, self.a+self.b self.i += 1 return ret else: raise StopIteration fib = Fib(10) print(next(fib)) print(next(fib)) print(next(fib)) print(next(fib)) for i in fib: print(i)
# 想要多少个就next()多少个
八、有了迭代器,接下就可以了解生成器
生成器是一种特殊的迭代器,它比迭代器更优雅
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:orm查询存在价格为空问题
下一篇:表格输出内容
- 如何用Python制作优美且功能强大的数据可视化图像 2019-07-24
- 为什么[]比list()更快? 2019-07-24
- 教你如何用Python 连接 MySQL 2019-03-12
- 熟练掌握Python的内置函数,加快编程速度 2019-02-21
- Python:如何用一行代码获取上个月是几月 2019-02-21
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash