2011-02-12 53 views
2

進口我有許多功能模塊:效率在Python

模塊一

def a(): 
... 
def b(): 
... 
def c(): 
.... 

現在,從不同的模塊,我需要進口僅函數b。爲此,我使用的語法:

from One import b 

我的問題 - 旁邊的命名空間的考慮,有沒有在我的節目的時間複雜度的任何積極的效果,如果我使用上面,而不是import One規定的進口,因爲這樣我只輸入必要的功能(爲了舉例,我只在module One中使用了3個功能,但我有更多功能)

+1

1.導入從不會對「複雜性」產生任何影響。我認爲你錯誤地使用了「時間複雜度」這個短語。如果您詢問「運行時間」,可能會產生微觀影響。 2.不要優化進口,爭取清晰和意義。 – 2011-02-12 13:12:58

回答

5

讓我們找出的標杆。從腳本開始:

#!/usr/bin/python 
for i in xrange(100000): 
    print "def foo%d(): pass\n" % i 

它生成一個大的Python程序。我們將它保存到foo.py

計劃import.py只是做一個import foo,(四個重複):

# time python import.py 

7.83s user 0.55s system 99% cpu 8.381 total 
1.52s user 0.11s system 99% cpu 1.630 total 
1.54s user 0.09s system 100% cpu 1.626 total 
1.48s user 0.15s system 100% cpu 1.623 total 

第二個(和後續)執行速度更快,因爲Python導入foo第一次,它包含了結果後摺痕文件foo.pyc的解析foo.py。這加快了模塊的所有後續導入。

計劃fromimport.py做了from foo import foo1,(四個重複):

# time python fromimport.py 

7.81s user 0.44s system 99% cpu 8.253 total 
1.48s user 0.15s system 100% cpu 1.626 total 
1.52s user 0.11s system 99% cpu 1.631 total 
1.49s user 0.14s system 100% cpu 1.630 total 

這些時間是非常類似於以前的程序(再次,第一次是慢,因爲Python的需要解析foo.py),其確認已經提供的其他答案的陳述在常見情況下import foofrom foo import foo1之間沒有顯着的性能差異。

正如其他人已經指出的那樣,這是因爲Python需要解析/運行整個文件,即使其中只有一小部分被調用者實際使用。

6

否。完整模塊必須完全運行(第一次)無論如何,這個名字甚至會存在於其中。

2

完整的模塊被加載,想象一下:

b = 1 
def a(): 
    return b 
在我們的第二個文件

現在:

from somemodule import a 

print a()  

嗯哦

+1

這沒有解決OP詢問的時間。 – ash 2011-02-12 09:24:09