2015年12月28日

lazy import 4

これまで、lazy import の手法を3つ紹介してきました。
本項では、通常の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 件のコメント:

コメントを投稿