インポート文は常にモジュールの先頭に置く必要がありますか? 質問する

インポート文は常にモジュールの先頭に置く必要がありますか? 質問する

ペップ8状態:

インポートは常にファイルの先頭、モジュールのコメントとドキュメント文字列の直後、モジュールのグローバルと定数の前に配置されます。

しかし、インポートするクラス/メソッド/関数がまれにしか使用されない場合は、必要なときにインポートを実行する方が効率的ではないでしょうか?

これは次の通りです:

class SomeClass(object):

    def not_often_called(self)
        from datetime import datetime
        self.datetime = datetime.now()

これより効率的なものはありますか?

from datetime import datetime

class SomeClass(object):

    def not_often_called(self)
        self.datetime = datetime.now()

ベストアンサー1

モジュールのインポートは非​​常に高速ですが、即時ではありません。つまり、次のようになります。

  • インポートをモジュールの先頭に配置するのは、一度だけ支払う些細なコストなので問題ありません。
  • 関数内にインポートを配置すると、その関数の呼び出しに時間がかかります。

したがって、効率を重視する場合は、インポートを先頭に配置します。プロファイリングによってそれが役立つことが示された場合にのみ、それらを関数に移動します (パフォーマンスを最も改善できる場所を確認するためにプロファイリングを実行しましたよね??)


私が見た遅延インポートを実行する最も良い理由は次のとおりです。

  • オプション ライブラリのサポート。コードに異なるライブラリを使用する複数のパスがある場合、オプション ライブラリがインストールされていなくても中断しません。
  • __init__.pyプラグインの では、インポートされても実際には使用されない可能性があります。例としては、のbzrlib遅延読み込みフレームワークを使用する Bazaar プラグインがあります。

おすすめ記事