モジュール
1つのモジュールは~.pyという1つのスクリプトファイルに相当する。
__name__
スクリプトファイルは単独のプログラムとしても動作するし、他のプログラムやモジュールから呼び出して使うこともできる。
・__name__属性
単独のプログラムとして起動したときは"__main__"が代入される。
モジュールとして呼ばれたときはファイル名の.pyの前が代入される。
if __name__ == "__main__":
とすると、単独プログラムで実行された時の動作を記述できる。
importの挙動
import math a = 1 def func(): return 100 class Test(int): pass print("__name__は", __name__) # __name__は __main__ if __name__ == "__main__": print("testmodule.pyを起動しました") else: print("testmodule.pyをimportしました")
これをtestmodule.pyとして保存し、他のプログラムからimportしてみると
import testmodule as tm # __name__は testmodule # testmodule.pyをimportしました a = 2 # モジュール変数,関数,クラスはモジュール名をつける print(tm.a, a) # 1 2 print(tm.func()) # 100 c = tm.Test("3") #importしたモジュールでimportしたモジュールが使える d = tm.math.sqrt(400) print(c, d) # 3 20.0
複数モジュールのimportはもちろん、多重importもできるが、
関数名、クラス名が同一のものがある場合は、あとからimportしたモジュールで上書きされる。
from module import * のようにすべての関数をimportするときは注意。
importの書き方
import module | シンプルな書き方 |
import module as mo | moduleをimportし、moという名で扱う |
import m1, m2, ... | カンマ区切りでmoduleを列挙できる |
from module import f1, f2, ... | カンマ区切りで関数,クラスを列挙できる |
from module import * | すべての関数をimportし、module名なしで使う |
from module import func | func関数だけをimportし、module名なしで使う |
パッケージ
スクリプトファイルをフォルダでまとめると、複数のモジュールをひとまとまりのパッケージとして扱える。
パッケージとして使うフォルダには__init__.pyという名前のファイルを設置する。
__init__.pyファイルは空ファイルでもいいし、初期化用のコードを書いてもよい。
階層は何層にも重ねることができる。
package1フォルダのmodule1ファイルをimportするときは、
import package1.module1 などとする。