Remrinのpython攻略日記

python3に入門しました。python3についてあれこれとサンプルコードとか。

モジュール

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 などとする。
 

モジュールの検索順

1 起動したスクリプトファイルのあるフォルダ
2 環境変数PYTHONPATHに設定されているフォルダ
3 標準ライブラリのフォルダ
4 追加モジュールのフォルダ(site-packagesフォルダ)
 
PyPI(Python Package Index)で多数のモジュールが登録されている。