Pythonにはモジュールという考え方があります。
モジュールとは端的に言ってしまえば、Pythonプログラムの事です。
だから abc.py も xyz.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が出ました!
心配は怠け者の暇つぶし
モジュールのメリット
モジュールについてまとめるならこうなるでしょう。
以上、Pythonモジュールについてでした。
コメント