Python:モジュールについて

Python

Pythonにはモジュールという考え方があります。

モジュールとは端的に言ってしまえば、Pythonプログラムの事です
だから abc.pyxyz.py も全てモジュールという事になります。

モジュールとは?

Pythonでは、あるモジュールから別のモジュールを呼び出すことができます。abc.pyというPythonプログラムでxyz.pyを呼び出すことが出来るという事です。
モジュールの呼び出しには import を使います。例として abc.py を呼び出すにはこうします。

import abc

importを使うとき、拡張子の py は省きます。
ただしモジュールを呼び出したからといって何も起きません。モジュールを利用するには通常、モジュール内に関数クラスの記述をしておきます

モジュールを使ってみる

簡単なモジュールの利用例を示します。

まずは他のプログラムから利用できるように関数のみを定義したPythonスクリプトファイルを作成しておきます。

mylib.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# -*- charset: utf-8 -*-
import random
 
"""
    サイコロの1~6を返す関数
"""
def saikoro():
    return random.randint(1, 6)
 
"""
    名言を表示する関数
"""
def meigen():
    meigen_list = ["心配は怠け者の暇つぶし", "手に入りにくいものは欲しくなる", "地図は現地ではない", "義を見てせざるは、勇なきなり", "終わりが近づけば、何が大切か分かる"]
 
    print(meigen_list[random.randrange(len(meigen_list))])

ファイル mylib.py には2つの関数が定義されています。

関数名機能使い方
saikoroサイコロの目(1~6)をランダムで返すa = saikoro()
meigen名言をランダムで表示するmeigen()

これを別のPythonファイルから呼び出してみます。
mylib.py を呼び出すために新たに test_mylib1.py というファイルを作成します。

test_mylib1.py

1
2
3
4
5
6
7
8
# モジュールを使ってみる1
 
import mylib
 
n = mylib.saikoro()
print("{}が出ました!".format(n))
 
mylib.meigen()

実行イメージ ※注 実行するたびに表示は変わります

1が出ました!
心配は怠け者の暇つぶし

解説

import mylib

とすることで mylib.py に定義した関数やクラス(今回は関数のみ定義)にアクセスできます。

ただし、importで指定したモジュール内の関数やクラスの呼び出しは注意が必要です。関数やクラスの先頭にモジュール名をつけて.(ピリオド)でつなげて呼び出す必要があるからです。

importで指定したモジュール内の関数やクラスの呼び出し方

《モジュール名》.《関数 or クラス名》

例として、mylib.py に定義した関数meigenを別ファイルから呼び出す場合はこうします。

import mylib
mylib.meigen()  # mylibモジュールのmeigenを呼び出し

もし頻繁に使いたいのであれば、毎回頭にモジュール名をつけるのは面倒です。
先頭に記述するモジュール名を省く方法を次に示します。

fromを使ってimport文を制御する

モジュール内の特定の関数やクラスのみ直接参照したい場合

例えば mylibモジュール内の saikoro関数のみ直接呼び出したい場合はこうなります。

test_mylib2.py

1
2
3
4
5
6
# モジュールを使ってみる2: モジュール内の特定の要素を指定する
 
from mylib import saikoro
 
n = saikoro()
print("{}が出ました!".format(n))

実行イメージ

6が出ました!

解説

直接呼び出したい場合は、from句を使います。

from 《モジュール名》 import 《直接呼び出したい関数 or クラス名》

今回は、mylibモジュール内のsaikoro関数を直接呼出したいので、こうしています。

from mylib import saikoro

importには、複数の要素を指定することも可能です。その際は、 , (カンマ)で区切ります。

from mylib import saikoro, meigen

importに指定したい要素が多い場合は、* を使って全ての関数やクラスを直接参照することも出来ます。
次の例を見て下さい。

モジュール内の全ての関数やクラスを直接参照したい場合

全て」を意味する *(アスタリスク)をimport文に指定することで、モジュール内の全ての関数やクラスを直接参照できます。

test_mylib3.py

1
2
3
4
5
6
7
8
# モジュールを使ってみる3: モジュール内の全ての要素を指定する
 
from mylib import *
 
n = saikoro()
print("{}が出ました!".format(n))
 
meigen()

実行イメージ

2が出ました!
心配は怠け者の暇つぶし

* 指定は便利なので、使ってしまいがちですが、プログラムに取り込む要素が増えるということは実行時のメモリを圧迫することにもなるので注意が必要です。
また、from mylib import saikoro などのように具体的に指定した方がどのモジュールから何の要素を取り込んでいるか一目瞭然です。プログラムを後から見た際、分かりやすいかもしれません。

モジュールのメリット

モジュールについてまとめるならこうなるでしょう。

1度作った関数やクラスを再利用できる仕組みがモジュールである

以上、Pythonモジュールについてでした。

コメント

タイトルとURLをコピーしました