自作モジュールとは
自分で作成した .py ファイルもモジュールとして他のファイルからインポートできます。同じコードを複数のプログラムで再利用する際に便利です。
モジュールの作成
例として、mymath.py というモジュールを作ります。
python
# mymath.py"""自作の数学モジュール"""PI = 3.141592653589793def add(a, b): """2つの数の和を返す""" return a + bdef subtract(a, b): """2つの数の差を返す""" return a - bdef circle_area(r): """円の面積を返す""" return PI * r * rpython
# main.py(同じディレクトリに置く)import mymathprint(mymath.PI) # 3.141592653589793print(mymath.add(3, 4)) # 7print(mymath.circle_area(5)) # 78.54...__name__ 変数
Pythonファイルは、直接実行されたときとモジュールとしてインポートされたときで動作を変えることができます。
python
# mymath.py"""自作の数学モジュール"""def add(a, b): return a + b# このブロックは直接実行したときのみ実行されるif __name__ == "__main__": # テストコード assert add(1, 2) == 3 print("テスト完了!") print(add(10, 20)) # 30- 直接実行(
python mymath.py):__name__は"__main__" - インポート時(
import mymath):__name__は"mymath"
パッケージの作成
関連するモジュールをまとめたパッケージ(ディレクトリ)を作ることができます。
mypackage/
__init__.py ← パッケージとして認識させるファイル
math_utils.py
string_utils.py
python
# mypackage/__init__.py# パッケージの初期化ファイル(空でもOK)# よく使う関数をパッケージレベルでエクスポートfrom .math_utils import add, subtractfrom .string_utils import count_vowelspython
# mypackage/math_utils.pydef add(a, b): return a + bdef subtract(a, b): return a - bpython
# main.pyimport mypackagefrom mypackage import math_utilsfrom mypackage.string_utils import count_vowelsmypackage.add(1, 2) # 3(__init__.py でエクスポート済み)math_utils.subtract(5, 3) # 2相対インポートと絶対インポート
パッケージ内では、相対インポート(. を使う)が使えます。
python
# mypackage/math_utils.py# 絶対インポートfrom mypackage.string_utils import count_vowels# 相対インポート(同じパッケージ内)from .string_utils import count_vowelsfrom ..other_package import something # 上の階層モジュール検索パス
Pythonがモジュールを探す場所は sys.path で確認できます。
python
import sys# モジュール検索パスの一覧for path in sys.path: print(path)# 検索パスに追加sys.path.append("/path/to/my/modules")練習: 自作モジュールを作る
以下の関数を含む stats.py モジュールを作成してください:
mean(data): 平均値median(data): 中央値