【Python】モジュールでプログラムを機能ごとにファイル分割


Pythonでモジュールを利用すると、プログラムを複数のファイルに分割して実行することができます。

コマンドの行数が多くなると一つのファイルにまとめるよりも、ファイルを分割したほうが全体の把握や改良がしやすくなります。
以下では、モジュールを使いプログラムを分割した、メンテナンスのしやすいプログラムの簡単な作成例を紹介します。


【Python】モジュールの動作と作成の方法について

プログラミングをする上で、コマンドが増えて行数も増えていくと、1ファイル自体が非常に長くなり、メンテナンスをする際も困難になってしまいます。

そのような時に、Pythonでは機能ごとにファイルを分割する仕組みがあります。
Pythonでは、1つのファイルに書かれているプログラムを「モジュール」と言います。

このモジュールを「import(インポート)」という機能を使うと他のモジュールの関数を読み込んで実行ができます。
これにより、複数のファイルを分割してプログラムを実行することができます。

モジュールの作成

モジュールの作成は、Pythonの一般的なプログラムの書き方と変わりません。
以下では、「module01.py」というファイルを作成し、足し算と引き算の関数を別モジュールに分割します。

このファイル「module01」がモジュールとなります。
「module01.py」

def add(a, b):
    return a + b

def sub(a, b):
    return a - b


import文でモジュールを利用しプログラムを実行

上記で作成したモジュールは、import文で読み込むことで利用できます。
以下では実際にモジュールをインポートして使用する場合は、実行するプログラムで「import module01」を書くことによりmodule01モジュールが使用できるようになります。

また、使用する方法は、ここでは「module01」という名前で使用することで、module01内の関数を実行することができます。
実行するには、「module.add()」や「module.sub()」を指定します。

「module01.py」を作成

def add(a, b):
    return a + b

def sub(a, b):
    return a - b

「import-test.py」を作成

import module01

sum = module01.add(10, 5)
dif = module01.sub(20, 15)
print(sum, dif)
  1. import module01 : module01モジュールをインポート
  2. sum = module01.add(10, 5) : module01モジュールのadd関数を実行
  3. dif = module01.sub(20, 15) : module01モジュールのsub関数を実行
  4. print(sum, dif) : プリント関数でプログラムの処理結果を表示

実行結果

上記でモジュールを使ったプログラムを作成し、以下のようにプログラムを実行すると、足し算と引き算の答えを出力します。

$ python3 import-test.py 
15 5
$ 

モジュールは同じフォルダに作成すること

上記のプログラムを実行するには、import文ではモジュールのファイルを同じフォルダ内から検索します。

上記のプログラムでは、「module01.py」と、「import-test.py」を同じフォルダに配置し、実行します。
同じフォルダ内にモジュールのファイルがない場合は、プログラムを実行するとエラーが発生し、プログラムが実行できなくなります。

関数を利用し、モジュール名を使用せずにプログラムを実行する

インポートしたモジュールを使用する場合、毎回、上記のようにモジュール名を使用して関数を指定するのも面倒と感じる方もいます。
このような場合は以下のように「from」キーワードを使用した関数を直接インポートします。

fromを使用し、importした関数は以下のようにモジュール名がなくても実行できます。
実行結果は同じですが、プログラムの書き方がシンプルになるところがメリットです。

from module01 import add, sub

sum = add(10, 5)
dif = sub(20, 15)
print(sum, dif)

実行結果

$ python3 import-test.py 
15 5
$ 

モジュールは複雑なプログラムをシンプルにするのに大きく役に立ちますので、利用していきましょう。


関連記事


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUTこの記事をかいた人

blank

インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!