本項では、通常のimport とこれら3つの手法について比較し、lazy import の使い所について考察します。
-
通常のimport
- 長所:
-
・最も標準のやり方
・面倒さは皆無
・importが冒頭にまとめられるので、依存関係を把握しやすい - 短所:
- ・起動が遅くなる
-
lazy import 1 ローカルでのimport
- 長所:
-
・起動が早くなる
・仕組みが簡単 - 短所:
-
・毎回 import を書くのは面倒
・ソースコードの冒頭だけでは依存関係を把握できない
・import箇所を繰り返し通ると、速度低下に繋がる
-
lazy import 2 グローバル変数の利用
- 長所:
-
・起動が早くなる
・import箇所を繰り返し通っても、速度はほとんど落ちない - 短所:
-
・毎回 import を書くのは面倒
・import部分を書くのに3行も必要。また、グローバル変数の変更を要する
・os.path のように . を含むモジュールをそのままでは import できない(os_path のように変形する必要がある)
-
lazy import 3 LazyImportクラス
- 長所:
-
・起動が早くなる
・import箇所で明示的に import 処理を書かなくてもよい - 短所:
-
・専用のクラスが必要
・参照の度に getattr() が呼ばれるため、動作は遅い
・os.path のように . を含むモジュールをそのままでは import できない(os_path のように変形する必要がある)
こうして見ると、通常のimport が最も Pythonic な手法であることが分かります。
通常のimport のただひとつの短所を回避する lazy import の手法はいくつかあるけれど、その手法はどれも別の短所を持っている、といったところでしょうか。
import に際して取るべきルールを以下にまとめます。
- 基本は、通常のimport を用いる。
- 起動時間が重要ならば、import箇所を繰り返し通るかどうかによって、「ローカルでのimport」か「グローバル変数の利用」かを使い分ける。
0 件のコメント:
コメントを投稿