本格的にPythonの学習を進めている。今日はモジュール。
モジュールという用語は色々なプログラム言語で使用される言葉だし、プログラムを設計する段階でも使用される。
Pythonで言うモジュールとは、要するに拡張子がpyとなっているファイルのこと。
モジュールは、トップレベルスクリプト(つまり、ユーザーが実行するスクリプト)、または他のモジュールからimport文によりインポートされて、モジュールオブジェクトに格納される。モジュールオブジェクトが生成されるときには、そのモジュールに書かれているコードが実行される。
すでに同名のモジュールオブジェクトが存在する場合には、単に生成済みモジュールオブジェクトを呼び出すだけである。
ここで注意すべきなのは、モジュールがimportされる際には、そのコードが実行されること。これは簡単なコードで確認することができる。
まず、import mtest とだけ書いたPythonスクリプトを作成し、保存する。ファイル名は何でもいい。
import mtest
さらに、print “imported module”とだけ書いたモジュールを作成し、mtest.pyとして、先ほど作成したPythonスクリプトと同じディレクトリに保存する。
print "imported module"
そして、最初に作成したスクリプトを実行すると、imported moduleと表示されるはずである。
さらに、最初に作成したスクリプト中のimport文をコピーして複数行記述して実行してみる。
それでもimported moduleと作成されるのは一度のみのはずである。
一回モジュールオブジェクトが生成されて以降は、同じモジュールがimportされても、生成済みのモジュールオブジェクトを探し出して使用できるようにするだけなので、何度も表示はされない。
ここで注意すべきは、モジュールに書かれているコードはimport時に実行されるので、上で作成したコードのように、トップレベルに何らかの処理を行うコードが書かれているとそれが実行されてしまう、ということ。
関数定義とか、クラス定義記載されているだけならば、それらが使用されるまでは何も処理されないが、さっきの print “imported module”のような文がトップレベルで記載されているとimport文が実行されたときに実際に処理が行われるので、処理内容によってはおかしなことが起こってしまうかもしれない。逆に、これを利用して便利なモジュールを作る、というのも可能だろう(実際に作る用途があるのかどうかは知らないが、技術的には可能なはず)。
モジュールは重要だと思うので、さらに詳しく勉強する必要がありそう。なので、一応この投稿の題名には、その1、というのを付け加えた。続く予定。
トラックバックURL
コメントをどうぞ



