3

スクリプトのメモリ消費を減らすために、モジュールから必要なものだけをインポートするのが適切かどうか、またはすべてをインポートする必要があるかどうかを考えていました。そのように書き始めると、 write により多くの時間を費やす可能性があると思いますが、それだけの価値はありますか? つまり、メモリの使用量が増える可能性を減らすことができますか?

以下のコードでは、少なくとも関連する部分だけが、私が計画していることの現在の例です。

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

前もって感謝します。

4

4 に答える 4

4

モジュールをインポートしても無駄にはなりませ。モジュールは常に完全にsys.modules(マッピングに)インポートされるため、使用するかどうimport ftplibfrom ftplib import FTPは関係ありません。

これがなぜなのか、モジュールのインポートが実際に何を意味するのかについて、プログラマーの「モジュールのインポート」と「モジュールのインポート機能から」のクロスサイト重複質問で詳しく説明します。

于 2013-08-01T16:51:23.783 に答える
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
于 2013-08-01T16:57:47.017 に答える
2

完全なモジュールは一度ロードされますが、サブモジュールはロードされません (親モジュールによってインポートされていない場合)

于 2013-08-01T16:51:22.617 に答える
2

fromすべてをインポートすることと構文を使用することの間にパフォーマンスの違いはありません。

構文が便利で、場合によっては好まれる理由はfrom <module> import <function>、コードで実証されています。構文を使用する必要はなくmodule.function、代わりにモジュール関数をネイティブ関数として使用できるため、コードが大幅にクリーンになります。

于 2013-08-01T16:51:39.810 に答える