5-2. モジュールの作り方

モジュールの作り方について説明します。

参考

Pythonではプログラムをモジュールという単位で、複数のファイルに分割することができます。 通例、一度定義した便利な関数などを別のプログラムで再利用するときには、再利用される部分をモジュールとして切り出します。 プログラムが大きくなると、このように複数のファイルに分割した方が開発や保守が簡単になります。

モジュールファイル

本授業で扱ってきたノートブックファイル(拡張子 .ipynb)は、コードセル(Codeセル)にPythonソースコード、Markdownセルに文書を持ち、内部的に出力結果も保存しています。 一方、モジュールファイル(拡張子 .py)は、Pythonソースコードのみを含んだファイルです。

モジュールファイルを作るときには、Jupyter Notebook におけるコードセルの内容のみをファイルに記述することになります。

モジュールファイルの文字コードはUTF-8であることが公式に推奨されています。 原則としてUTF-8でエンコードして保存してください。

ノートブックファイルをモジュールファイルに変換する

本授業で利用しているノートブックファイルを .py としてセーブするには、 「ファイル」メニューの「.py をダウンロード」項目を選択します。

そうすると、コードセルだけがプログラム行として有効になり、その他の行はコメントアウトされたモジュールファイルがダウンロードできます。 ダウンロード先はブラウザによって定まりますが、ダウンロードフォルダになることが一般的でしょう。

この方法では、全てのコードセルの内容を一度に実行するプログラムとして保存されます。 ノートブックのようにセル単位の実行するわけではないことに注意する必要があります。

モジュールファイルをアップロードする

次に、ダウンロードしたモジュールファイルをColaboratoryで使うには、 Colaboratoryの実行環境の中のファイルシステムのカレントディレクトリに モジュールファイルをアップロードする必要があります。 このためには、以下のセルを実行してください。

[1]:
import sys
if 'google.colab' in sys.modules:
    from google.colab import files
    uploaded = files.upload() # Upload to the current directory

自作モジュールの使い方

モジュールで定義されている関数を利用するには、import を用いて import モジュール名 と書きます。 モジュール名は、モジュールファイル名から拡張子 .py を除いたものです。

すると、モジュールで定義されている関数は モジュール名.関数名 によって参照できます。

次の関数が記述された factorial.py というモジュールを読み込む場合を説明します。 ただし、読み込み元と同じディレクトリに factorial.py が存在すると仮定します。

factorial.py:

# 階乗n!を返す
def fact(n):
    prod = 1
    for i in range(1, n + 1):
        prod *= i
    return prod
[2]:
import factorial

factorial.fact(6)
[2]:
720

fromas の使い方も既存のモジュールと全く同じです。

モジュール内で定義されている名前を読み込み元のプログラムでそのまま使いたい場合は、from を用いて以下のように書くことができます。

[3]:
from factorial import fact

fact(6)
[3]:
720

ワイルドカード * を利用する方法もありますが、推奨されていません。 読み込まれるモジュール内の未知の名前と、読み込み元のプログラム中の名前が衝突する可能性があるためです。

[4]:
from factorial import *

モジュール名が長すぎるなどの理由から別の名前としたい場合は、as を利用する方法もあります。

[5]:
import factorial as f

f.fact(6)
[5]:
720