Pythonのモジュール(module)の使い方-import,from-
Pythonのモジュール(module)は関数やクラスなどを1つのファイルにまとめたもので、他のプログラムから呼び出すことのできるものです。
基本的には関数やクラスを宣言し、それを読みこんで(importして)使います。
Pythonのモジュール(module)
Pythonのモジュール(module)は関数やクラスなどを1つのファイルにまとめたものです。
他のプログラムから呼び出すことができ、呼び出す際には「import文」でそのモジュールをロードしておく必要があります。
ロード方法は以下の通りです。
import モジュールファイル名(拡張子「.py」を除いたもの)
Pythonのモジュール(module)内の関数呼び出し
では、実際にPythonのモジュール(module)内の関数を呼び出ししてみます。
まずはモジュール(module)のソースです。
ここではファイル名は「sub_module.py」にしました。
#他のプログラムから呼び出される関数 def add_num( x, y ) : return x + y ;
次に呼び出す側のプログラムです。
Pythonのモジュール(module)を呼び出すには前述の通り「import文」を使い、呼び出す時に、そのモジュール名と関数名を「.(ピリオド)」でつないで呼び出しを行います。
ここでは呼び出す側のファイル名を「main.py」にしています。
import sub_module x = 10 y = 20 ret = sub_module.add_num( x, y ) print( "{}=module.add_num( {}, {} )".format( ret, x, y ))
これで
python main.py
と実行すると
30=module.add_num( 10, 20 )
となり、モジュール(module)内の関数が呼び出せていることが確認できます。
Pythonのモジュール(module)名のエイリアス
上記のmian.pyの「import sub_module」の後ろに「as エイリアス名」を追加するとモジュール(module)の関数がエイリアス名と関数名を「.(ドット)」でつないだ形で呼び出すことが可能になります。
モジュール名が長い時などに便利です。
import sub_module as sub x = 10 y = 20 ret = sub.add_num( x, y ) print( "{}=module.add_num( {}, {} )".format( ret, x, y ))
fromを使ってオブジェクト名を指定してimportする
Pythonのモジュール(module)は「from」でモジュール名を指定し、そのなかのオブジェクト(関数や変数)だけをimportすることができます。
呼び出される側のモジュール(module)に2つの関数を用意します。
ここではファイル名は「sub_module.py」にしました。
#他のプログラムから呼び出される関数 def add_num( x, y ) : return x + y ; def sub_num( x, y ) : return x -y ;
呼び出す側のソースでfromを使ってオブジェクト(関数や変数)を指定してimportします。
from sub_module import add_num x = 10 y = 20 ret = add_num( x, y ) print( "{}=module.add_num( {}, {} )".format( ret, x, y ))
このコードを実行するすると
30=module.add_num( 10, 20 )
となり正常に実行できます。
ただし、importにない「sub_num()」関数を呼び出すと
30=module.add_num( 10, 20 ) Traceback (most recent call last): File "main.py", line 8, in <module> ret = sub_num( x, y ) NameError: name 'sub_num' is not defined
とエラーになります。
両方をimportすると
from sub_module import add_num, sub_num x = 10 y = 20 ret = add_num( x, y ) print( "{}=module.add_num( {}, {} )".format( ret, x, y )) ret = sub_num( x, y ) print( "{}=module.add_num( {}, {} )".format( ret, x, y ))
実行結果は
30=module.add_num( 10, 20 ) -10=module.add_num( 10, 20 )
となり正常に両方の関数を実行することができるようになります。
またimportを「*(アスタリスク)」を使って行うとすべてのオブジェクト(関数や変数)をimportすることができます。
複数のモジュール(module)のimport
プログラムが大きくなっていくと複数のモジュール(module)をimportすることになって行きますが、複数のモジュール(module)をインポートする際は
import os, sys, re
などのように「,(カンマ)」でつないでimportすることが可能です。
注意が必要なのは「PEP8(Python の標準ライブラリに含まれているPythonコードのコーディング規約)」では「,(カンマ)」でつないでimportすることは推奨されておらず、行を分けてimportすることになっています。
import os import sys import re
ただし「from」を使ってimportする際は「,(カンマ)」でつないでimportすることもOKになっています。