Hatena::Groupfukuoka-py

taketin.py RSSフィード

 | 

2011-12-21

初めてのPython 18章 モジュールとインポート 19章 モジュールのインポート、リロード

00:34 | 初めてのPython 18章 モジュールとインポート 19章 モジュールのインポート、リロード - taketin.py を含むブックマーク はてなブックマーク - 初めてのPython 18章 モジュールとインポート 19章 モジュールのインポート、リロード - taketin.py

18章 モジュールインポート


モジュールファイルをインポートすると、グローバルスコープがモジュールオブジェクトの属性名前空間になる

C, C++,(Jython を使っている場合は Javaも)等の言語で作られたモジュールエクステンションモジュールと呼ばれる。インポート方法は通常と同じ。



import ステートメントに渡すモジュール名は呼び出すモジュールのファイル名であり、モジュールオブジェクトを格納する変数名でもある

import a    # a が変数名でありファイル名である
a.spam('gumby')

この処理が行われるのは、該当モジュールがはじめてインポートされた場合のみである


上記4つを連結したものが sys.path となる。1 と 3 は自動的に設定される。カスタマイズできるのは 2 と 4 の内容となる。


バイトコードファイルはインポートに際して作成される。トップレベルファイルはバイトコードである .pycファイルは作成されない。

ロード済みモジュールは sys.modules にディクショナリとして保存される。インポート処理が行われるとまずここに格納されていないかがチェックされ、既にロードされていれば読み込まれない。明示的にモジュールの再読み込みをする場合は reload関数を使用する。


19章 モジュールインポート、リロード

>>> from module1 import printer
>>> printer('hello world')
hello world

  • from * ステートメント
    • トップレベルの変数が全てコピーされる
    • import ステートメントとの違いは、「すべての変数をコピーする」というところ

from ステートメントは名前空間を混乱させてしまう場合があるので、簡単なモジュールであれば import を使うようにし、from を使う場合は * を使用するのは1ファイルに1回を限度とし、できるだけインポートする変数を指定する様にすれば安全である。




reload関数を定期的に呼び出すようにすれば、プログラム全体を停止せずに随時変更を行うようなプログラムを作成する事ができ、ダイナミックなアプリケーションを組む事ができる。

ゲスト



トラックバック - http://fukuoka-py.g.hatena.ne.jp/tksthdnr/20111221
リンク元
 |