2012-08-01 81 views
-1


基本上,我想知道如果在每个模块中导入标准库比在模块中一次导入标准模块并且在其他模块中重新使用它更好/更差。换句话说,我想知道是否有以下两个代码之间的任何速度/性能差异:
python导入处理速度

""" 
One way - Just importing time module only once 
""" 
# /usr/bin/python 
# mytime.py 
import time 

def get_time(): 
    return time.time() 


# /usr/bin/python 
# usingtime.py 
import mytime 

print (mytime.time() - mytime.time.time()) 



""" 
Another way - importing time module as needed 
""" 
# /usr/bin/python 
# mytime.py 
import time 

def get_time(): 
    return time.time() 


# /usr/bin/python 
# usingtime.py 
import time 
import mytime 

print (mytime.time() - time.time()) 

哪个代码是更好?还是它真的很重要?

+0

你的意思是打印(mytime.get_time() - 了time.time())吧? – aneroid 2012-08-01 17:36:21

+2

可能的重复[是否python优化模块,当他们被多次导入?](http://stackoverflow.com/questions/296036/does-python-optimize-modules-when-they-are-imported-multiple-times) – jterrace 2012-08-01 17:42:17

回答

2

在第二个例子中没有理由重新导入time,这实际上就是你在做什么。为了优雅,您应该只将模块导入(直接)使用模块。

想象一下进口3级的深度(一个模块导入另一个模块,导入另一个模块...)并跟踪所有那些在第一个顶级模块中的导入!这将是一个噩梦来维持。

就速度而言,我相信再次进口会带来可忽略不计的性能。当不止一次导入时,Python解释器不会执行完全重新导入。

1

来源:http://docs.python.org/reference/simple_stmts.html#the-import-statement

检查的第一个地方是sys.modules中,该 此前已进口的所有模块的缓存。如果在那里找到该模块,那么在导入的步骤(2)中使用的是 。

通过导入加载的模块基本上是单例。在模块的第一次导入时,模块全局作用域中的代码将被执行(模块的初始化),模块实例将被添加到sys.modules中。任何其他模块中的下一个导入只会引用此初始化实例。成本可以忽略不计。

简单的例子:

a.py

print "HELLO" 

b.py

import a 
import c 

c.py

import a 

在交互式解释:

Python 2.6.6 (r266:84297, Aug 24 2010, 18:13:38) [MSC v.1500 64 bit (AMD64)] on 
win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import b 
HELLO 
>>> 

(请注意如何 “HELLO” 只打印一次)