python loops_Python 性能优化 -- Loops

Python 性能优化 -- Loops

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

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

分享到:

2010-08-03 23:21

浏览 2448

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值