【Python入門】自作関数をモジュール化してコード可読性を向上

Pythonで自作関数をコードの冒頭に書いていったら、メインの処理がどこに書いてあるのか分かりづらくなった。そんな経験ありませんか?

C言語なら関数をコード冒頭に宣言し、関数自体はコード最後尾に記述しても良かったのに……。

この悩みを解決するのが、関数のモジュール化です。自作関数を別ファイルに分け、importで呼び出せば、プログラム冒頭からメイン処理が書けますよ。

今回は、自作関数のモジュール化について解説していきます!

この記事はこんな人におすすめ!

  • Pythonを学習し始めた人
  • Pythonで自作関数が増えすぎてしまった人
  • Pythonでコード可読性を向上したい人
Python 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイルを学ぶオンライン講座
目次

関数をコード冒頭に宣言すると可読性が悪化

まずメイン処理が分かりづらくなった例として、以下コードを挙げます。

def plus(x, y):
    z = x + y
    s = "{0}+{1}は{2}です。".format(x, y, z)
    return s

def minus(x, y):
    z = x - y
    s = "{0}-{1}は{2}です。".format(x, y, z)
    return s

x = 7
y = 5
print(plus(x, y))
print(minus(x, y))
5+7は12です。
5-7は-2です。

Pyhonは自作関数がコード冒頭にズラズラと書かれ、11行目からメイン処理が始まります。

この例は関数が短く、画面をスクロールしなくてもメイン処理が見えます。しかし、関数が長かったり、複数作成すると、どこにメイン処理が書かれているか画面をスクロールしないと分かりません。

この比較例として、C言語で記述した例を示します。

#include <stdio.h>

char* plus(int x, int y);
char* minus(int x, int y);

int main()
{
    int x = 7;
    int y = 5;
    printf("%s\n", plus(x, y));
    printf("%s\n", minus(x, y));
}

char * plus(int x, int y)
{
    int z = x + y;
    char s[40];
    sprintf_s(s, "%d+%dは%dです。", x, y, z);
    return s;
}

char* minus(int x, int y)
{
    int z = x - y;
    char s[40];
    sprintf_s(s, "%d-%dは%dです。", x, y, z);
    return s;
}

C言語はメイン処理がコード冒頭にあるので、分かりやすいですよね。

プログラムも文章と同じで、始めに全体の流れを把握できると読みやすさがグッと向上します。

自作関数を別ファイルに保存しモジュール化

それでは、コードの可読性を上げるために自作関数をモジュール化していきます。

自作関数はコード冒頭にdef文で定義しましたね。この部分をまるごと別ファイルに保存して下さい。ここではmyFunc.pyとしました。作成したファイルは、メインコードと同じディレクトリに保存しましょう。

def plus(x, y):
    z = x + y
    s = "{0}+{1}は{2}です。".format(x, y, z)
    return s

def minus(x, y):
    z = x - y
    s = "{0}-{1}は{2}です。".format(x, y, z)
    return s

メインファイルから自作関数のファイルをimport

自作関数をメインファイルから削除したので、自作関数を読み込む記述が必要です。自作関数を読み込むにはimport文を使います。

import myFunc

x = 5
y = 7
print(myFunc.plus(x, y))
print(myFunc.minus(x, y))

importの後ろにmyFuncと記述します。.pyの拡張子は不要です。

このimport文は、Numpyやmatplotlibを読み込むときなど、頻繁に使いますよね。

メインファイルで自作関数を呼び出すときは、自作関数名のみの記述でしたが、自作関数をモジュール化した場合は、自作関数のファイル名も指定する必要があります。

自作関数のパッケージ化

モジュールをフォルダ内に入れ、階層下することも可能です。モジュールをフォルダにまとめたものがパッケージとなります。

myFuncを呼び出すにはfrom文を使います。

from testPack import myFunc

x = 5
y = 7
print(myFunc.plus(x, y))
print(myFunc.minus(x, y))

まとめ

今回は、Pythonの自作関数モジュール化について解説しました。

自作関数をコード冒頭に記述するのではなく、別ファイルに記述することで、メイン処理の可読性を向上することが出来ました。

今回の記事が皆さんのPython学習に役立つなら幸いです。

独りでPython学習するのは大変だなと思う方は、書籍やスクールを活用するのも手です。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

大学で機械工学を学んだ後、製造業で働く40代の会社員です。
IT系、電気系を学んでこなかった機械系人間が、ゲーム制作、電子工作に奮闘してます。
極力低コストでものづくりを楽しむのがモットー。

目次