いろいろ倉庫

KNIME、EXCEL、R、Pythonなどの備忘録

【Python】モジュールを作ってみたい

・お題:処理の一部を関数化することがあるけれど、いちいち関数を作成するのもめんどくさい。関数を集めたモジュールを作成し、読み込むだけで関数を使えるようにしたい。

 

・関数とモジュールの関係は、関数が「具体的な計算機能」のこと、モジュールが「関数がいくつか集まった.pyファイル」のことらしい。モジュールの.pyファイルが集まったディレクトリをパッケージと呼ぶっぽい。イメージ的には、「関数」が足し算のこと、「モジュール」が足し算などの四則演算のやり方が書いたメモのこと、パッケージがメモがたくさん入った封筒、みたいな感じ…??実際に使うときは、四則演算.pyファイルをカレントディレクトリに保存し、import 四則演算してから、四則演算.足し算で関数を呼び出す。

 

・とりあえず、作ってみる。

・jupyter labで関数を2つ作成する。今回は階乗と三角数を求める関数を作成してみた。

def kaijo(m = 1):
    ans = 1
    n = 1
    while n <= m:
        ans = ans * n
        n = n + 1
    return ans

def sankakusu(m = 1):
    ans = 0
    n = 1
    while n <= m:
        ans = ans + n
        n = n + 1
    return ans

・jupyter labでファイルを保存すると、デフォルトで.ipynbファイルになる。モジュールは.pyファイルなので、File⇒Save and Export Notebook As...からExecutable Scriptを選択し、.pyファイルとして保存する。

・私の場合はダウンロードフォルダに.pyファイルが保存された。ファイル名がモジュール名になるっぽいので、ファイル名をtest.pyに変更し、カレントディレクトリに保存した。

・次に、作成したモジュールtestを起動し、関数kaijoを試してみる。

import test
test.kaijo(5)

で120が返ってきた。確かに機能していそう。基本的にこんな感じで使えそう。

・少し調べてみると、以下のおまじない?が出てきた。これはいったい何なのか?

if __name__ == "__main__": 
    先に定義した関数

・以下のサイトに詳しく解説されていた。正しいことは元サイトをご確認いただきたい。

note.nkmk.me

コマンドラインから.pyを実行した場合と、インポートして実行した場合で処理を分けることができるらしい。また、モジュールをコマンドとして利用したい場合にも使えるらしい。今の私の用途・練度だとあまり影響ないかもしれないが、少しだけ頭にとどめておきたい。

・もうちょっと追加で調べていると、クラスという機能を利用して自前の機能を作成することもあるらしい。ただし、私程度の用途であれば、そこまで突っ込まなくても良い印象。もうちょっと大規模・複雑なものを作成したい場合はそのような機能も活用した方が良さそう。

・以下の記事が勉強になったので、気になる方はご確認いただきたい。

qiita.com

 

・なんとなく動くものはできたけれど、調べれば調べるほど色々な機能が出てくる。私のような素人は、とりあえず動くことを楽しみたい。。。

 

おわり。