1. ホーム
  2. python

[解決済み] import文は常にモジュールの先頭にあるべきですか?

2022-03-20 09:37:25

質問

PEP 8 の状態になります。

Importsは常にファイルの先頭に置かれ、モジュールコメントやdocstringの直後で、モジュールグローバルや定数の前に置かれます。

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

これではありませんか。

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

解決方法は?

モジュールのインポートはかなり高速ですが、即座にはできません。ということです。

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

ですから、効率を重視するのであれば、インポートを一番上に置くことです。インポートを関数内に移動させるのは、プロファイリングでそれが有効であることが示された場合だけにしてください。 した のプロファイリングで、パフォーマンスを向上させるのに最適な場所を確認することができますね?)


遅延インポートを行う理由として、私が見た中では

  • オプションのライブラリに対応。あなたのコードが異なるライブラリを使用する複数のパスを持っている場合、オプションのライブラリがインストールされていない場合、壊れないようにします。
  • での __init__.py は、インポートされても実際には使用されないプラグインです。例としては Bazaar プラグインがあり、これは bzrlib のレイジーローディングフレームワークを使用します。