导入完整的模块或只是我需要的,以减少内存

2024-09-30 22:27:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我在想,为了减少任何脚本的内存消耗,是否需要从模块中导入所需的内容,还是应该导入所有内容?我相信如果我开始用这种方式写作,可能会花费更多的时间来写作,但值得吗?我是说,能不能减少更多的内存使用?你知道吗

在下面的代码中,最新的相关部分是我计划做什么的一个最新示例:

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

提前谢谢。你知道吗


Tags: 内存fromimport内容binlibasconnect
3条回答

导入模块不会浪费任何东西;模块总是完全导入(导入到sys.modules映射中),因此无论您使用import ftplib还是from ftplib import FTP都没有任何区别。你知道吗

我在'import module' vs. 'from module import function'的一个跨站点重复问题上详细阐述了这一点的原因以及导入模块对程序员的真正意义。你知道吗

完整模块将加载一次,但没有子模块(如果父模块未导入子模块)

你应该尽量少导入。i、 e

"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

相关问题 更多 >