Python 命名空间/名称查询 对效率的影响

虽然不提倡过早优化Python代码,但看到名称查询对代码运行时间影响不小,就贴个上来。

环境:

  • 主频2.5GHz
  • windows 7 32bit
  • Python 2.7.3
  • IPython 0.13.1
示例函数定义:
def old():
    import math
    d = 0.0
    for x in xrange(1000000):
        d += math.sqrt(x)

def new():
    from math import sqrt
    d = 0.0
    for x in xrange(1000000):
        d += sqrt(x) 

时间:

In [129]: time old()
CPU times: user 0.27 s, sys: 0.00 s, total: 0.27 s
Wall time: 0.27 s

In [130]: time new()
CPU times: user 0.22 s, sys: 0.00 s, total: 0.22 s
Wall time: 0.22 s

new()函数比old()函数运行效率提高20%。
原因在于old()函数每次循环调用都要两次名称查询,第一次是从全局名称空间中查询math module,第二次是从math中搜索sqrt函数。而new()函数每次循环只需一次名称查询。

参考:Python精要参考

你可能感兴趣的:(python)