1. ホーム
  2. python

[解決済み] 関数内部でインポートするのはpythonicですか?

2022-05-05 22:01:32

質問

PEP 8 は言う。

  • インポートは常にファイルの先頭に置かれます。 のコメントと docstring の前、そしてモジュールのグローバルと定数の前です。

時々、PEP 8に違反することがあります。関数の中にあるものをインポートすることがあるのです。一般的なルールとして、1つの関数内でのみ使用されるインポートがある場合、私はこれを実行します。

何かご意見はありますか?

EDIT(関数でインポートすることが良いと感じる理由)。

主な理由:コードをより明確にすることができる。

  • ある関数のコードを見るとき、「xxxという関数・クラスは何だろう」と考えるかもしれません(xxxは関数内で使われています)。もし私がすべてのインポートをモジュールの一番上に持っている場合、私はxxxが何であるかを決定するためにそこに行かなければなりません。この問題は from m import xxx . ご覧ください m.xxx を使えば、もっとよくわかると思います。この関数の m があります。よく知られたトップレベルのモジュール/パッケージなのか( import m )? それともサブモジュール/パッケージ( from a.b.c import m )?
  • 場合によっては、xxxが使われている場所の近くに余分な情報("xxxとは何か?")があることで、その機能を理解しやすくなることがあります。

どのように解決するのですか?

長い目で見れば、インポートのほとんどをファイルの一番上に持ってくることが重要だと思います。そうすれば、インポートする必要があるものによって、モジュールがどれだけ複雑かが一目瞭然になります。

既存のファイルに新しいコードを追加する場合、私は通常、それが必要な場所でインポートを行い、コードが残る場合は、インポート行をファイルの先頭に移動することによって、より恒久的なものにします。

もう一点、私はどちらかというと ImportError を実行する前に、サニティチェックとして例外が発生します。

私は pyChecker を使用して、未使用のモジュールをチェックします。