【6日でできるPython入門】モジュール

Pythonプログラムを整理・再利用しやすくするために「モジュール」という仕組みがあります。
 モジュールとは関数やクラスをまとめたファイル単位の部品であり、複数のファイルにプログラムを分割して管理することができます。
既に組み込み関数や標準ライブラリのモジュールを使ってきましたが、自作のモジュールを作成し、import文で読み込むことで自分のコードも再利用しやすくなります。
ここでは、モジュールの基本から応用までをわかりやすく解説します。


1.モジュールの基本と使い方

1.1. 自作モジュールを作る

calc.pyという名前で、足し算関数を定義します。

ファイル名: calc.py

# calc.py
def add(x, y):
    return x + y

def subtract(x, y):
    return x - y

def multiply(x, y):
    return x * y

1.2. 他ファイルからモジュールを読み込む

同じフォルダにmain.pyを作り、calcモジュールを使います。

ファイル名: main.py

# main.py
import calc

a = 10
b = 5
print(f"{a} + {b} = {calc.add(a, b)}")
print(f"{a} - {b} = {calc.subtract(a, b)}")
print(f"{a} * {b} = {calc.multiply(a, b)}")

実行結果

10 + 5 = 15
10 - 5 = 5
10 * 5 = 50

解説

  • import calccalc.pyの関数を使えます。
  • calc.add(x, y)のようにモジュール名.関数名で呼び出します。

1.3. from-import文による部分的な読み込み

ファイル名: lesson23-1.py

from calc import add, multiply

print(add(7, 3))
print(multiply(7, 3))
# subtractは未インポートなので呼べない
# print(subtract(7, 3))  # これはエラーになる

実行結果

10
21

解説

  • 必要な関数だけを直接呼び出せるため、名前空間をすっきりできます。

1.4. importの別名指定

ファイル名: lesson23-2.py

import calc as c

print(c.add(2, 4))
print(c.subtract(2, 4))

実行結果

6
-2
6
-2

解説

  • asでモジュール名を短縮して使いやすくできます。

2.モジュールの実行と if __name__ == '__main__':

2.1. import時の挙動

main2.pymain.pyをimportした場合、

ファイル名: main.py(修正版)

# main.py(修正版)
import calc as c

def main():
    print(c.add(1, 2))

if __name__ == '__main__':
    main()

ファイル名: main2.py

main2.pyを実行するとmain.py内のif __name__ == '__main__':以下の処理は実行されません。

# main2.py
import main

解説

  • モジュールはimportされると、最初から順に読み込まれますが、
    __name__ == '__main__'直接実行時だけTrueになるため、
    import時にはこのブロックは実行されません。

2.2. main関数パターン

  • プログラムの起点をmain()にまとめるのが良い習慣です。
  • 他のモジュールからもmain.main()で呼び出せます。

ファイル名: main3.py

main3.pyを実行するとmain.py内のmain():が実行されます。

# main3.py
import main

main.main()

実行結果

3.モジュール内での簡単なテスト

ファイル名: calc.py(末尾に記述)

# calc.py
def add(x, y):
    return x + y

def subtract(x, y):
    return x - y

def multiply(x, y):
    return x * y

# calc.pyの末尾に記述
if __name__ == '__main__':
    print("テスト:add(3,4) =", add(3, 4))
    print("テスト:subtract(10,5) =", subtract(10, 5))

実行結果(直接calc.pyを実行した場合)

テスト:add(3,4) = 7
テスト:subtract(10,5) = 5

解説

  • モジュール単独実行時だけテストが走るので便利です。
  • 他のプログラムからimportされたときはテストは動きません。

まとめ表:モジュールの基礎

項目内容ポイント
モジュールPythonファイル単位でコードをまとめる関数・クラスの集合を分割・再利用しやすくする
import他のモジュールを読み込むimport モジュール名でモジュール全体を読み込む
from-import必要な部分だけ読み込むfrom モジュール import 関数名
as(別名指定)名前を短くするimport モジュール名 as 別名
__name__ == '__main__'直接実行時だけ動くコードを書く場所importされた場合は実行されない

 モジュールを活用すれば、プログラムの規模が大きくなってもコードを分かりやすく整理でき、他のプログラムからも再利用しやすくなります。
この基本を押さえ、モジュール設計の第一歩を踏み出しましょう。