python 的迭代器:如何用最快的速度读出大小为10G的文件的行数?
off999 2024-10-15 12:10 44 浏览 0 评论
with open('rm_keys.txt', 'r', encoding = 'utf-8') as f:
count = 0
for line in f:
count += 1
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()多少个
八、有了迭代器,接下就可以了解生成器
生成器是一种特殊的迭代器,它比迭代器更优雅
相关推荐
- office免费版下载win7(office2007官方免费版)
-
office2007官方下载免费完整版win7/win8/win8.1/win10通用的。office2007官方下载免费完整版win7/win8/win8.1/win10通用版本包括Word、Exc...
- hp笔记本重装系统按哪个键(hp笔记本win10重装系统详细步骤)
-
恢复系统重装,在开机时n1SC键,在弹出的菜单中按f2或者是f9键,选项中选择如果是从光盘重装系统的就选择从光盘启动系统,如果使用U盘,启动系统就选择从U盘进入到系统中在开机时按ESC调出启动菜单,有...
- 磁盘重新分区(磁盘重新分区怎么操作)
-
您好,以下是给磁盘重新分区的步骤:1.打开磁盘管理工具。在Windows中,可以按Win键+X,然后点击磁盘管理来打开。在Mac中,可以打开磁盘工具来进行分区。2.选择需要分区的磁盘。在磁盘管理工...
- 如何用手机设置无线路由器密码
-
首先打开你的手机,在设置中确认连接上你的wifi之后,任意打开一个浏览器,输入“tplogin.cn”;进入页面可以看见一个输入框,输入你设置过的宽带密码,如果你不知道可以打电话给宽带的客服查询;进入...
- 台式电脑用usb重装系统步骤(台式电脑怎样usb装机)
-
1.U盘WinPE系统制作先到网上去下载一个u盘启动盘制作工具的工具,常用的有u大师U盘启动盘制作工具。再把U盘插入电脑中,运行软件将u盘制作成启动盘。2.准备系统GHO镜像文件在网上下载GHOST系...
- hotmail邮箱格式(hotmail邮箱登录后缀)
-
电子邮箱的正确格式为user@mail.server.name,其中user是收件人的用户名,mail.server.name是收件人的电子邮件服务器名。具体详情如下:1、QQ邮箱的标准格式为:112...
- windows11主题包(win10 win11主题)
-
1."梦幻星空"是ColorOS11中最好看的主题。2.这是因为"梦幻星空"主题采用了炫酷的星空元素,配合流畅的动画效果,给人一种梦幻般的感觉。同时,主题的配色也...
- 戴尔官方商城官网(戴尔官方商城官网首页)
-
https://www.dell.com/戴尔公司于1992年进入《财富》杂志500强之列,戴尔因此成为其中最年轻的首席执行官。戴尔公司名列《财富》杂志500强的第48位。自1995年起,戴尔公司一直...
- ghost64位(一键还原ghost)
-
步骤如下: 1、首先登陆微软官网(点击进入),根据自己电脑的需求下载IE11forWin7的对应版本(这里强调IE11forWin7只针对Win7SP1或以上系统); 2、选择对应的IE...
- ie8 ie10浏览器手机版下载(ie8_11浏览器安卓手机版)
-
进入出现提示的网页,点击IE11右边的齿轮,再选添加到兼容性视图列表。网页会刷新一下,就变成IE7方式打开了。试试看。如果你无法下载文件,这个时候你可以把电脑重新启动一下,然后清理一下内存,再打开I...
- 手机破解qq空间相册的方法(手机怎么破解qq空间相册视频教学)
-
没有什么办法,你可以直接询问她吧,既然分手了就不要再纠缠了最好。QQ空间解锁步骤:1、登陆QQ空间,在右上角找到“设置”,把鼠标青放在设置上,不要点击,出现“帮助中心”。2、然后点击“帮助中心”,就会...
- 纯净版的win7旗舰版(win7的纯净版和旗舰版有什么区别)
-
win7系统纯净版,旗舰版并不是同一类概念。主要区别如下:纯净版是win7ghost版本的一种类型,是指该系统就是纯粹的win7系统,未包含任何第三方软件;而旗舰版是win7系统的官方划分的一种类型...
-
- 免费企业邮箱来一个(申请免费的企业邮箱)
-
1.首先,我们登录我们的QQ,然后点击QQ上方的小邮件标识;2.弹出的界面,我们点击下方的企业邮箱;3.弹出的界面,我们点击开通邮箱;4.弹出的界面,我们点击免费版的立即开通;5.然后我们输入相关的信息,最后点击注册;6.最后就注册完成了。...
-
2025-12-24 02:51 off999
- 怎么更新win11(怎么更新win11补丁最快)
-
要更新电脑系统到Windows11,需要满足一定的硬件要求。首先,你需要确保你的电脑符合以下最低硬件要求:-64位处理器或系统架构-4GBRAM-64GB存储空间-DirectX12兼容显卡...
- cpu温度过高原因(cpu温度太高怎么回事)
-
cpu温度过高的原因 1.CPU风扇散热不行。CPU风扇与CPU接触不完全,CPU风扇转速过低,风扇质量不过关,这都是造成CPU温度过高的原因。 2.系统使用CPU占用率100%。系统垃圾过多,开...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
