只是为了好玩,我写了一堆函数,遍历一个文件并将每一行放入一个列表中:#!/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()慢得多?相关推荐

  1. python优化网站_[练习] 用PYTHON来优化网站中的图片

    我到公司以来,第一次加班,哇,加一晚上加一上午,现在还没下班的迹象,555,困. 对于网站中的一些关键的页面,多重缓存.静态化.程序代码优化--之外,为了提高用户打开页面的速度,图片是必须要优化的. ...

  2. load python txt文件_详解Python中numpy.loadtxt()读取txt文件

    为了方便使用和记忆,有时候我们会把 numpy.loadtxt() 缩写成np.loadtxt() ,本篇文章主要讲解用它来读取txt文件. 读取txt文件我们通常使用 numpy 中的 loadtx ...

  3. python turtle 绘图_谈一下Pycharm中关联系统Python解释器的方法

    大家知道,PyCharm是一款著名的Python IDE开发工具,是拥有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,具备基本的调试.语法高亮.Project管理.代码跳转.智能提示 ...

  4. python 获取当前目录_如何在Python中获取当前的工作目录?

    python 获取当前目录 To get the current working directory in Python, there is a library function getcwd() i ...

  5. python日期迭代_计算敏捷项目中迭代时间安排(Python3版)

    节奏是敏捷开发的核心,保持合理固定的节奏,能有效的促使各个环节协调统一,高效运行.针对产品的不同周期,方案有所不同. 迭代开发.jpg 通常,我们需要在一个时间盒中去分配一个项目中不同阶段的时间,在项 ...

  6. python绝对导入_[编程基础] Python中的绝对导入与相对导入

    如果您从事的Python项目有多个文件,那么您以前可能不得不使用import语句.即使对于拥有多个项目的Python重度使用者(比如我),import也可能会造成混淆!您可能正在阅读本文,因为您想对P ...

  7. python 生成器 原理_你知道python中的函数、生成器的工作原理吗?

    1.python中函数的工作原理 python的解释器,也就是python.exe(c编写)会用PyEval_EvalFramEx(c函数)运行foo()函数 首先会创建一个栈帧(stack Fram ...

  8. python框架漏洞_注意!Python中的10个常见安全漏洞及修复方法

    编写安全的代码很困难,当你学习一门编程语言.一个模块或框架时,你会学习其使用方法.在考虑安全性时,你需要考虑如何避免代码被滥用,Python也不例外,即使在标准库中,也存在着许多糟糕的实例.然而,许多 ...

  9. eclipse配置python开发环境_如何在Eclipse中配置python开发环境

    展开全部 步骤1: 下载用于在2113Eclipse中开发Python的插件PyDev. 步骤2: 解压5261python.将解压后的features和plugins文件4102夹中的1653内容拷 ...

最新文章

  1. Canu|三代组装软件
  2. VR医疗|全球首例“换头手术”成功了么?
  3. java socket负载均衡_Java Socket分发服务负载均衡
  4. 【最简单的例子】Editor.md的初步使用
  5. 2016腾讯安全挑战赛第一轮-PC游戏方向
  6. 程 序 测 试 规 范
  7. Oracle 各种语法(一)
  8. 无数老板做企业还在卖产品赚差价
  9. 华为光纤猫HG8240R设置
  10. Java常用代码汇总(经典代码)
  11. 通过Python给头像加国旗,10多行代码搞定,就别@官方了
  12. 22届哈工大深圳计算机854考研经验贴、过程总结贴(初试 353 复试 304 上岸哈工大深圳)
  13. 9N90-ASEMI的MOS管9N90
  14. uni app video、视频播放开发
  15. A16z、YGG、Axie 圆桌对话:Web3 游戏接下来该怎么走?
  16. 用js实现登录的简单验证
  17. MySQL增加新的分区
  18. AD PCB设计入门总结(二)
  19. 计算机网络——校园网端口流量passby分析
  20. PostgreSQL - null和''的区别与判断以及COALESCE函数

热门文章

  1. 中国可以访问 Google Codelabs 网站啦!
  2. 手写数字识别MNIST数据集下载百度网盘链接快速下载
  3. 【C语言系列】-结构体中的内存对齐
  4. 数据库:存储过程实验
  5. 我不是java的布道者
  6. 鸿蒙比苹果流畅的手机,比苹果iOS14更流畅,华为鸿蒙系统一鸣惊人,17款机型优先升级...
  7. QQ环境下分享自定义内容
  8. AE出现已禁用刷新(要刷新视图,请释放Caps Lock)
  9. 算法:三数之和(js)
  10. android数据库导入,Android项目中如何导入数据库