2013-08-01 25 views
3

我在想如果是相關的導入正是我需要從模塊爲了減少任何腳本的內存消耗,或者我應該只是導入一切?我相信如果我開始寫這種方式可以消耗更多的時間寫,但它值得嗎?我的意思是,可以減少更多使用內存的機會?導入完整模塊或只是我需要爲了減少內存

隨着代碼波紋管,一個tleast只是相關部分是什麼IM規劃做一個當前的例子:

from ftplib import FTP as FTP_LIB 
from ftplib.FTP import connect as FTP_CONNECT 
from ftplib.FTP import login AS FTP_LOGIN 
from ftplib.FTP import cwd as FTP_CWD 
from ftplib.FTP import storbinary as FTP_STORE_BIN 
from ftplib.FTP import retrbinary as FTP_RETRIV_BIN 
from ftplib.FTP import delete as FTP_DELETE 
from ftplib.FTP import quit as FTP_QUIT 
from zipfile import ZipFile 
from zipfile import ZIP_DEFLATED 
from sys import exit as SYS_EXIT 


#-------------------------------------------------------------------------- 
# FTP Download 
#-------------------------------------------------------------------------- 
def get_file(self, iServer, ftpPort, login, pwd, fileName, path): 
    parts = iServer.split(":") 
    host = parts[0] 
    ftp = FTP_LIB() 
    try: 
     FTP_CONNECT(host, ftpPort, 20) 
     FTP_LOGIN(login, pwd) 
     FTP_CWD(path) 
     FTP_RETRIV_BIN('RETR ' + fileName, open(fileName, 'wb').write) 
    except Exception, e: 
     print " Download failed : " + str(e) 
     SYS_EXIT(1) 
    finally: 
     FTP_QUIT() 

在此先感謝。

+1

跨站點重複數據刪除:['導入模塊「從模塊導入功能」與(http://programmers.stackexchange.com/ q/187403) –

回答

4

導入模塊不會浪費任何(如果它們沒有被父模塊進口);該模塊總是導入(進入sys.modules映射),所以無論您使用import ftplib還是from ftplib import FTP都沒有任何優勢。

我詳細說明了這是爲什麼以及導入模塊真的意味着在程序員上,在跨站點重複問題'import module' vs. 'from module import function'

+0

感謝您參考跨站點副本。對於閱讀這篇文章的其他人,我建議查看鏈接評論我的主要答案。 –

2

全部模塊將被加載一次,但沒有子模塊

2

導入所有內容和使用from語法沒有性能差異。

爲什麼from <module> import <function>語法有用並且有時是首選?在您的代碼中演示:您不需要使用module.function語法,而是可以使用模塊函數作爲本機函數,使代碼更清晰。

+0

爲了OP的緣故:有'' import *',它在語法上達到相同的便利性,但可以導入所有內容。 – 2rs2ts

3

你應該嘗試儘可能少的導入。即

"from sys import a" is better than "from sys import *" 

其背後的理由是,我們不會因爲重複而導致事情不能按預期工作。目前已有相當數量的模塊複製。因此,通過導入多個包中的所有內容,我們可能會通過錯誤的模塊結束更改。

from modA import * 
from modB import * 

what if subModA is available in both modA and modB. 

儘量避免"from modA import submodA as renamed_submodA"。它使其他人難以理解代碼。

我會重寫你的定義爲如下可讀性,

from ftplib import FTP 
from ftplib.FTP import connect, login, cwd, storbinary, retrbinary, delete, quit 
from zipfile import ZipFile, ZIP_DEFLATED 
from sys import exit as SYS_EXIT 
+0

是的,很好的答案。避免陰影材料很重要。 – 2rs2ts

+0

我用*僅用於導入我自己的模塊。 – eri

相關問題