[解決済み] 関数内部でインポートするのは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
を使用して、未使用のモジュールをチェックします。
関連
-
Pythonコンテナのための組み込み汎用関数操作
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] 複数行の長い文字列を作成するためのPythonicな方法
-
[解決済み] フルパスでモジュールをインポートするには?
-
[解決済み] 億の相対的輸入
-
[解決済み] モジュール名を文字列で指定してインポートするには?
-
[解決済み] import文は常にモジュールの先頭にあるべきですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python call matlab メソッドの詳細
-
Python jiabaライブラリの使用方法について説明
-
Python百行で韓服サークルの画像クロールを実現する
-
任意波形を生成してtxtで保存するためのPython実装
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み] import文は常にモジュールの先頭にあるべきですか?
-
[解決済み】Pythonで、関数の中でimportするとどうなるのか?[重複しています]。