【Python Tips】自作関数のつくり方とインポートして使う方法(モジュール化・パッケージ化・ライブラリ化)

投稿日:2018-03-28



ナカジ(@cp_nakajun)です。

Pythonに限らず、プログラミングで何かをしようとすると「同じような記述(処理)を何回も書く」ようなことがあります。

例えば、ある「家族A」「家族B」「家族C」があって「それぞれの家族の年齢の合計を求める」プログラムを作るような場合(そんなニーズはまぁないけど)

この場合家族の人数もそれぞれの年齢もバラバラですが、やることは単純に足し算ですし、足し算部分は「共通」の処理です。

この時、2~3家族程度ならコピペで増やすこともできますが対象が20~30、100など増える程に面倒くさいですし、読みにくく汚いプログラムになっていきます。
(間違いも起こりやすく、修正も大変、応用も使いまわしもできない)

さらに複雑な処理になればなるほど、この傾向は強くなります。

プログラムにするからには自作関数として外部に置き、呼び出して使いまわすべきです。

ということで、今回は

  • 自作関数のつくり方
  • 自作関数をインポートして使う方法

です。

Python 自作関数のつくり方

関数を定義するには「def」を使います。

書き方は

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

という感じで書きます。

サンプルとして以下のように自作関数を作った場合

def unit1(in_1,in_2):
    cal_1 = in_1 + in_2
    return cal_1

  • unit1という関数名で呼びだします
  • in_1とin_2は引数です
  • in_1 + in_2がcal_1に代入されます
  • cal_1の値が呼び出し元にかえります

呼び出し方、関数の使い方は

out1 = unit1(2,4)

こうするとunit1の関数は足し算なのでout1には「6」が代入されます。

Python 自作関数をインポートして使う方法

自作関数を作ったら名前をつけて保存します。

サンプルとして以下のような関数を作り「my_Tools.py」と名前をつけて保存します。

[my_Tools.py]

#足し算
def unit1(in_1,in_2):
    cal_1 = in_1 + in_2
    return cal_1

#掛け算
def unit2(in_1,in_2):
    cal_2 = in_1 * in_2
    return cal_2

掛け算をする「unit2」も作りました。

メインプログラム(呼び出し側)を「main.py」とします。

「main.py」と「my_Tools.py」が同じ階層のディレクトリにある場合は


普通に

import my_Tools

とすればよいです。

[main.py]

import os
import my_Tools

input_a = 2
input_b = 4

out1 = my_Tools.unit1(input_a,input_b)
out2 = my_Tools.unit2(input_a,input_b)

print(out1)
print(out2)

実行すると、out1の「6」とout2の「8」が結果として表示されます。

Python 自作関数のモジュール化

上記の「my_Tools.py」には「unit1」と「unit2」という2つの関数が定義されてます。

このように他のPythonのプログラムから呼び出して使う「.py」のpythonプログラムをモジュールと呼びます。

  • my_Tools.py:モジュール
  • unit1:関数
  • unit2:関数

Python 自作関数のパッケージ化

先のサンプルのように「main.py」に対して読み込むモジュールが1つの場合は「main.py」と「my_Tools.py」が同じ階層のディレクトリにあっても特に不便はないでしょう。

メインプログラムの名前が「main.py」でない場合にどちらがメインプログラムかわかりにくいぐらいでしょうか。

これがモジュールが増えてきた場合などモジュールをまとめて別のディレクトリに置いて管理したくなると思います。

pythonではメインと同じディレクトリにフォルダーを作り、そこに入れたモジュールをインポートするには単純に「import module.py」ではインポートできません。

その場合はパッケージ化する必要があります。

パッケージとは単純にモジュールの集まりのことです。
他の言語ではライブラリという言葉がよく使われていますが、Pythonではあまり使われることは無いようです。

パッケージ作成方法

なんか難しそうに感じますが、Pythonでパッケージを作るのは簡単です。

まずモジュールを一つのフォルダ(ディレクトリ)に入れてまとめます。



次にPythonに「このフォルダはパッケージですよ」と認識させるために
そのフォルダに[__init__.py]というファイルを作成します。
中身は空です。



これでこのフォルダはパッケージ化されます。

パッケージ内モジュールの使い方

パッケージ化をすることで別のディレクトリに置いたモジュールを利用できるようになります。

その方法は

from パッケージ名 import モジュール名

このパッケージ名はいわゆる「ディレクトリ名」です。

例えば以下のような階層構造の場合

-[workspace]
–main.py
–[self_made_module]
—my_Tools.py

メインからmy_Toolsをインポートするには

from self_made_module import my_Tools

となります。

Python学習にオススメ




独学で身につけるPython〜基礎編〜【業務効率化・自動化で残業を無くそう!】icon

【完全初心者向け】絶対に挫折させないPython入門講座icon

みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習 【2022年最新版】icon






シゴトがはかどる Python自動処理の教科書

PythonでExcel、メール、Webを自動化する本


おすすめのクリエイティブ・コーディング関連カテゴリー

クリエイティブコーディング系 講座


ウェブツール

機能はシンプルなものですが、p5.jsやTone.jsで描画したり音が出たりするので遊んでみてください。
・【Midi Number Tools】:MIDIナンバーから音名と周波数を判定します
・【Delay Time Calculator】:テンポに応じた音符の長さを判定します