python readlines慢_为什么在Python中readline()比readlines()慢得多?
只是为了好玩,我写了一堆函数,遍历一个文件并将每一行放入一个列表中:#!/usr/bin/python
def readlines():
with open("sorted_output.txt") as f:
line = f.readlines()
def readline():
with open("sorted_output.txt") as f:
line = f.readline()
lines = []
while line:
lines.append(line)
line = f.readline()
def iterate():
with open("sorted_output.txt") as f:
lines = []
for line in f:
lines.append(line)
def comprehension():
with open("sorted_output.txt") as f:
lines = [line for line in f]
下面是如何使用Python2.6在69073行的文件上执行这些操作(注意,这些结果在较新版本的Python上可能有所不同):dano@hostname:~> python -mtimeit -s 'import test' 'test.readline()'
10 loops, best of 3: 78.3 msec per loop
dano@hostname:~> python -mtimeit -s 'import test' 'test.readlines()'
10 loops, best of 3: 21.6 msec per loop
dano@hostname:~> python -mtimeit -s 'import test' 'test.comprehension()'
10 loops, best of 3: 23.6 msec per loop
dano@hostname:~> python -mtimeit -s 'import test' 'test.iterate()'
10 loops, best of 3: 33.3 msec per loop
因此,readlines()在这里是最快的,尽管使用列表理解对每一行进行迭代几乎与它匹配。我的猜测是,每种方法之间的速度差异主要是Python中函数调用的高开销(需要的函数调用越多,方法越慢)造成的,但也可能有其他因素。希望比我更有见识的人能对此发表评论。
除了性能之外,在决定使用哪种方法时,另一个重要的考虑因素是内存开销。使用readlines()将立即将整个文件读入内存。如果你处理的是一个巨大的文件,如果你试图一次将整个文件读入内存,它可能会导致严重的性能问题或整个程序崩溃。在这些情况下,您需要在iterate()中使用该方法,因为它一次只向内存读取一行。如果您只是在每一行上执行某种处理,然后将其丢弃,这通常是一种方法,即使它比readlines()稍慢,因为您不会获得相同的内存命中率。当然,如果最终的目标是将整个文件存储在一个Python列表中,那么无论如何,您都要支付内存开销,因此readlines()可以正常工作。
python readlines慢_为什么在Python中readline()比readlines()慢得多?相关推荐
- python优化网站_[练习] 用PYTHON来优化网站中的图片
我到公司以来,第一次加班,哇,加一晚上加一上午,现在还没下班的迹象,555,困. 对于网站中的一些关键的页面,多重缓存.静态化.程序代码优化--之外,为了提高用户打开页面的速度,图片是必须要优化的. ...
- load python txt文件_详解Python中numpy.loadtxt()读取txt文件
为了方便使用和记忆,有时候我们会把 numpy.loadtxt() 缩写成np.loadtxt() ,本篇文章主要讲解用它来读取txt文件. 读取txt文件我们通常使用 numpy 中的 loadtx ...
- python turtle 绘图_谈一下Pycharm中关联系统Python解释器的方法
大家知道,PyCharm是一款著名的Python IDE开发工具,是拥有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,具备基本的调试.语法高亮.Project管理.代码跳转.智能提示 ...
- python 获取当前目录_如何在Python中获取当前的工作目录?
python 获取当前目录 To get the current working directory in Python, there is a library function getcwd() i ...
- python日期迭代_计算敏捷项目中迭代时间安排(Python3版)
节奏是敏捷开发的核心,保持合理固定的节奏,能有效的促使各个环节协调统一,高效运行.针对产品的不同周期,方案有所不同. 迭代开发.jpg 通常,我们需要在一个时间盒中去分配一个项目中不同阶段的时间,在项 ...
- python绝对导入_[编程基础] Python中的绝对导入与相对导入
如果您从事的Python项目有多个文件,那么您以前可能不得不使用import语句.即使对于拥有多个项目的Python重度使用者(比如我),import也可能会造成混淆!您可能正在阅读本文,因为您想对P ...
- python 生成器 原理_你知道python中的函数、生成器的工作原理吗?
1.python中函数的工作原理 python的解释器,也就是python.exe(c编写)会用PyEval_EvalFramEx(c函数)运行foo()函数 首先会创建一个栈帧(stack Fram ...
- python框架漏洞_注意!Python中的10个常见安全漏洞及修复方法
编写安全的代码很困难,当你学习一门编程语言.一个模块或框架时,你会学习其使用方法.在考虑安全性时,你需要考虑如何避免代码被滥用,Python也不例外,即使在标准库中,也存在着许多糟糕的实例.然而,许多 ...
- eclipse配置python开发环境_如何在Eclipse中配置python开发环境
展开全部 步骤1: 下载用于在2113Eclipse中开发Python的插件PyDev. 步骤2: 解压5261python.将解压后的features和plugins文件4102夹中的1653内容拷 ...
最新文章
- Canu|三代组装软件
- VR医疗|全球首例“换头手术”成功了么?
- java socket负载均衡_Java Socket分发服务负载均衡
- 【最简单的例子】Editor.md的初步使用
- 2016腾讯安全挑战赛第一轮-PC游戏方向
- 程 序 测 试 规 范
- Oracle 各种语法(一)
- 无数老板做企业还在卖产品赚差价
- 华为光纤猫HG8240R设置
- Java常用代码汇总(经典代码)
- 通过Python给头像加国旗,10多行代码搞定,就别@官方了
- 22届哈工大深圳计算机854考研经验贴、过程总结贴(初试 353 复试 304 上岸哈工大深圳)
- 9N90-ASEMI的MOS管9N90
- uni app video、视频播放开发
- A16z、YGG、Axie 圆桌对话:Web3 游戏接下来该怎么走?
- 用js实现登录的简单验证
- MySQL增加新的分区
- AD PCB设计入门总结(二)
- 计算机网络——校园网端口流量passby分析
- PostgreSQL - null和''的区别与判断以及COALESCE函数