LoginSignup
270
261

More than 5 years have passed since last update.

pythonで自作関数をモジュール化・パッケージ化

Last updated at Posted at 2018-11-12

pythonでの自作関数の作り方と使い方を説明していきます.

プログラムを作成していると,同じような処理が何度も出てくることがあります.
このような時に同じような処理が出てくる度に書くのはとても手間になります.それを自分の使いやすいように関数にしてしまったものが自作関数です.

ファイル内の自作関数

自作関数の形式はこのようになっています.

def 関数名(引数1,引数2,...):
    #関数の処理を記述
    return 戻り値

では,具体的に自作関数とそれを実行するプログラムを作っていきます.

test_1.py
# 2つの変数の和を計算する自作関数
def my_sum(x,y):
    z = x + y
    return z

# main関数
if __name__ == '__main__':
    out = my_sum(1,2)
    print(out)
output
3

これが一番基本的な自作関数の作り方と実行方法です.
しかし,この方法ではプログラムがどんどん長くなってしまい.扱いにくいプログラムになってしまいます.
そこで,別のファイルに自作関数をまとめる方法を紹介します.

同じディレクトリ内の自作関数

自作関数をまとめておくファイル(my_function.py)を作成します.
ファイル名はどんな関数かわかりやすいものにすると管理しやすいです.
自作関数で必要なライブラリはこのファイルで呼び出す必要があります.

my_function.py
# 2つの変数の和を計算する自作関数
def my_sum(x,y):
    z = x + y
    return z

# 2つの変数の差を計算する自作関数
def my_dif(x,y):
    z = x - y
    return z

次に実行するプログラムを作成します.
実行するファイルと自作関数のファイルが同じディレクトリにある場合は

import 自作関数のファイル名

とすれば自作関数を呼び出すことができます.
では実際に呼び出してみます.

test_2.py
#自作関数のインポート
import my_function

if __name__ == '__main__':
    a = my_function.my_sum(2,1)
    b = my_function.my_dif(2,1)
    print(a)
    print(b)
output
3
1

このように自作関数をまとめたファイルを作ることにより,実行するプログラムを短くすることができます.
しかし,もっと大きなプログラムになった場合は自作関数も多くなってしまいます.それに従って自作関数のファイルが多くなってしまい管理が難しくなってしまいます.ここで登場するのがパッケージ化です.

パッケージ化

先ほど作った自作関数のファイルをディレクトリでまとめていきます.
自作関数のファイルの作り方は同じなので「my_functin.py」を使います.
スクリーンショット 2018-10-26 18.22.02.png
このようにディレクトリを作成します.ここでもディレクトリの名前は管理しやすいように変更して大丈夫です.
ディレクトリの中に「__init__.py」という空のファイルを作る必要があります.このディレクトリはパッケージとして使われると言うことを示しています.
インポートの仕方が少し変わり,

#自作関数のインポート
from ディレクトリ名 import モジュール名

このようになります.では,実際に実行するファイルを作成します.

test_2.py
#自作関数のインポート
from my_module import my_function

if __name__ == '__main__':
    a = my_function.my_sum(2,1)
    b = my_function.my_dif(2,1)
    print(a)
    print(b)

関数自体は変えてないので出力は変わりません.

270
261
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
270
261