2013-08-01 2 views
3

메모리의 양을 줄이기 위해 모듈에서 필요한 항목을 가져 오는 것이 관련이 있는지, 아니면 모든 항목을 가져와야합니까? 나는 그 방법을 쓰기 시작하면 더 많은 시간을 쓸 수 있다고 생각하지만 쓸만한 가치가 있는가? 메모리 사용량을 줄일 수 있습니까? 사전에전체 모듈을 가져 오거나 메모리를 줄이기 위해 필요한 것

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() 

감사합니다 : 코드 울부 짖는 소리와

, 그냥 관련 부분 tleast 메신저 계획이 수행 할 작업의 현재의 예입니다.

+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의 목적을 위해 : 구문에서 동일한 편의성을 달성하지만 모든 것을 가져 오는'from 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

관련 문제