2012-08-01 79 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」 只打印一次)