`
Zhongwei_leg
  • 浏览: 552165 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Python 性能优化 -- Loops

阅读更多

Python 性能优化 -- Loops

以下内容翻译自: http://wiki.python.org/moin/PythonSpeed/PerformanceTips

 

Loops

Python 支持多种的遍历方式。for 语句是最常用到的。当循环体很简单的时候,可以使用 map function 来替代。你可以认为 map function 的效率和 c 一样高。唯一的限制是 "loop body" of map 是 function call. List comprehension 除了在语法上看起来更简洁外,效率上等同甚至超过 map.

例子:

 

newlist = []
for word in oldlist:
     newlist.append(word.upper())

 

使用 map 从而使 interpreter 将遍历部分转换成 compiled C 代码。

 

newlist = map(str.upper, oldlist)
 

Python 2.0 加入了 list comprehension。这是一种更加高效、简洁的 for 结构替代品。

newlist = [s.upper() for s in oldlist]

 

Python 2.4 引入了 generator expression. Generator expression 功能上类似于 list comprehension 和 map, 但是避免了生成整个列表.取而代之的是,返回一个 generator object which can be iterated over bit-by-bit.

(我的实验结果是: 在20万数据完全遍历的情况下 List comprehension 大概是 generator expression 效率的 10 倍)

newlist = (s.upper() for s in oldlist)

# detail
>>> oldlist = ['a', 'b', 'c']
>>> newlist = [s.upper() for s in oldlist]
>>> print newlist
['A', 'B', 'C']
>>> newlist = (s.upper() for s in oldlist)
>>> print newlist
<generator object <genexpr> at 0x01DEB968>
>>> for item in newlist:
...     print item
...
A
B
C
>>>
# end of detail

 

Guido van Rossum 写过一篇更加详尽的关于 loop 优化的 examination (Python Patterns - An Optimization Anecdote: http://www.python.org/doc/essays/list2str.html).


避免使用‘.’ (Avoiding dots...)


也 许你更倾向于使用 for loop, 而不是 map 或者 list comprehension. 但是 for loop 有其低效的一面.  Both newlist.append and word.upper are function references that are reevaluated each time through the loop. 所以, 原始的 loop 可以用以下代码替代:

upper = str.upper
newlist = []
append = newlist.append
for word in oldlist:
     append(upper(world))

 

使用这个技巧需谨慎。当 loop 结构很复杂的时候,这会变得难以阅读和维护。采用一目了然的变量名是一个折中的办法。

1
2
分享到:
评论

相关推荐

    Python库 | aioextensions-20.8.1392513.tar.gz

    在Python中,异步编程是通过asyncio模块来实现的,它提供了协程(coroutines)、事件循环(event loops)和 Futures 等工具,使得开发者可以编写非阻塞的代码,从而提高应用程序的并发性能。aioextensions库则是在...

    Python入门 PythonTutorial

    - **break and continue Statements, and else Clauses on Loops**: - **中断循环**:`break`关键字用于提前结束循环。 - **跳过迭代**:`continue`用于跳过当前迭代,继续执行下一次迭代。 - **循环外的else...

    python 性能提升的几种方法

    关于python 性能提升的一些方案。 一、函数调用优化(空间跨度,避免访问内存)  程序的优化核心点在于尽量减少操作跨度,包括代码执行时间上的跨度以及内存中空间跨度。 1.大数据求和,使用sum a = range(100000...

    Python Tutorial 2.7 [官方文档]

    - **性能测量(Performance Measurement)**:提供timeit和profile模块的指南,用于代码执行时间的分析和优化。 - **质量控制(Quality Control)**:推荐unittest和doctest模块,用于自动化测试和文档测试。 - **包含...

    Frontend_loops-markup:UI循环的集合

    **性能优化** 当处理大量数据时,需要注意循环性能。避免不必要的DOM操作,使用虚拟DOM,或者通过分批次更新数据来优化性能。同时,合理利用CSS3的硬件加速特性,如使用`transform`和`opacity`属性,可以提高动画...

    pythonchallenge level2官方方法集

    标题和描述均提到了"pythonchallenge level2官方方法集",这表明文章主要聚焦于Python Challenge网站上第二级挑战的官方解决策略集合。Python Challenge是一个知名的编程谜题网站,通过一系列精心设计的谜题来测试和...

    Python基础入门班 第5周 data.zip

    元组在需要数据不变性或者优化性能时非常有用。 3. **字典(Dictionary)**:字典是一种键值对数据结构,通过键来查找对应的值。字典用大括号`{}`定义,键值对之间用冒号`:`分隔,不同对之间用逗号分隔。字典提供了...

    Python如何计算语句执行时间

    在Python编程中,有时我们需要了解特定代码段或语句的执行效率,这通常涉及到计算语句的执行...这有助于编写出更加高效、优化过的Python代码。希望这些信息对你的学习和工作有所帮助,继续探索Python的世界,不断进步!

    python怎么提高计算速度

    除了上述方法,还有其他优化Python性能的策略: - **使用列表推导式**:对于简单的操作,列表推导式比for循环更高效。 - **利用生成器**:生成器允许延迟计算,减少内存占用,尤其在处理大型数据集时。 - **使用C...

    python 代码运行时间获取方式详解

    在进行Python代码性能优化的过程中,了解代码的运行时间是非常重要的一个环节。代码运行时间是指计算机执行程序代码所需要消耗的时间,它直观地反映了程序的效率。为了准确地测量Python代码的运行时间,有几种常用的...

    日月光华tensorflow2.0实战教程全部课件

    - Eager Execution 是 TensorFlow 2.0 的一个重要特性,它允许在运行时立即评估操作,提供更接近于 Python 的交互式体验。 - 学习如何在 Eager Execution 模式下编写、测试和调试代码,理解它与图形计算的区别。 ...

    Sudoku_Solver:解决Sudokus的简单Python 3程序

    1. **性能优化**:例如,可以使用位运算来存储和检查数独状态,提高效率。 2. **人机交互**:增加命令行界面,让用户输入数独谜题,或者从文件中读取。 3. **难度等级**:识别并标记不同难度级别的数独谜题。 4. **...

    godot-simple-tutorial:Godot简单教程的代码和示例

    - **性能监控**:检查帧率、内存使用情况,优化游戏性能。 通过这个教程,你将不仅了解GDScript的基本语法,还能掌握Godot引擎的核心功能,如节点系统、脚本控制、场景管理和资源管理。同时,实际项目的练习将帮助...

    解码核心ML YOLO对象检测器

    `Decoding-a-Core-ML-YOLO-Object-Detector.pdf` 文件可能提供了更详细的步骤和示例代码,而 `part_2a_decoding_with_loops.zip` 可能包含了一个实际的Python脚本,演示如何使用循环来实现解码过程。学习并理解这些...

    pycurry-开源

    它通过引入高级并发模式和工具,帮助开发者更高效地编写并发代码,以实现并行计算和优化程序性能。 此外,Pycurry项目还包括了一个接近完整的"按合同设计"(Design by Contract)实现。这是一种软件设计方法,它...

    VHL_GNN

    这涉及创建节点特征矩阵和边列表,有时还需要为图添加自环(self-loops)以确保每个节点都能接收到自己的信息。 2. **构建GNN模型**:定义GNN层的结构,包括消息传递函数和节点聚合函数。例如,可以使用GCN(Graph ...

    C语言超市管理系统 C语言

    10. **用户界面(User Interface)**:虽然C语言本身不支持图形用户界面,但可以通过第三方库如ncurses库在控制台上实现简单的命令行界面,或者与其他编程语言结合(如Python和C++)构建更复杂的图形界面。...

    qcor_spec:此存储库包含QCOR高级语言扩展的规范文档

    5. **性能优化和最佳实践**:QCOR可能提供了关于如何优化量子代码的指导,包括量子指令的并行化、量子电路的深度控制以及如何有效地利用经典-量子交互。 6. **兼容性信息**:QCOR可能支持多种量子硬件平台和模拟器...

Global site tag (gtag.js) - Google Analytics