Pythonの様々なimportのパターン

説明

様々なimportのパターン

動作確認環境:Python3.6 / macOS 10.14.3

他のファイルに記述されているPythonのコードを参照する

Pythonでも、他の言語と同じように
他のファイルに記述されているPythonのコードを使うことが出来る。
(Pythonコードをまとめたファイルをモジュールと呼ぶ。)

他のファイルへの参照は、import文を使う。

例えば、同一フォルダ内のsub.pyの中に記述されている
関数funcxxを呼び出したいとする。

こんな感じ。

import sub
sub.funcxx()

importにモジュールの名前を指定して
モジュール名付きの関数を呼び出すだけ。
とても簡単。

だが、importについて
これだけしか理解していないと混乱するときがある。

それは、importで指定出来る対象は
モジュールだけでなく、関数も指定出来るからだ。

こんな感じ。

from sub import funcxx
funcxx()

この場合、関数そのものをimportしているので
モジュール名の修飾を省略することが出来る。
(関数の入ってるモジュールはfromで指定)

こうして説明すると単純なことだが
importの後に記述されている名前が
モジュールなのか関数なのか
意識していないと混乱する、ということだ。

パターン1 モジュールごとインポート(ex.1)
import sub
sub.funcxx()

パターン2 特定の関数のみインポート(ex.2)
from sub import funcxx
funcxx()

パターン3 モジュールごとインポート(別名)(ex.3)
import sub as s
s.funcxx()

パターン4 特定の関数のみインポート(別名)(ex.4)
from sub import funcxx as f
f()

ex.0 例題に入る前に

今回、ex.1〜ex.4まで
4つのパターンをサンプルとして例示するが
そこで使用するインポートされる側のコードを以下に示す。

モジュール「test_import02_sub」の中に
関数「module01」を定義してある、。

ちなみに
module01は、渡されたパラメータを装飾して
コンソールに出力するサンプル。

test_import02_sub.py

#
# importされるモジュール
#
def module01(disptext):
    displen = len(disptext)
    dispstr = '*' * displen
    print("****" + dispstr + "****")
    print("*** " + disptext + " ***")
    print("****" + dispstr + "****")

ex.1 モジュールごとインポート

モジュールをまるごとインポートする例である。

#
# importする パターン1
#
#  単純にインポート
#      test_import02_sub.pyをまるごと
#      (import Pythonファイル名(拡張子なし))
#
import test_import02_sub

maintext = 'Python BANZAI!! Part1'
test_import02_sub.module01(maintext)

(実行結果)
*****************************
*** Python BANZAI!! Part1 ***
*****************************

ex.2 特定の関数のみインポート

関数を指定してインポートする例である。
fromでモジュールを指定し
importでは関数をする。

#
# importする パターン2
#
#  モジュールだけインポート
#      test_import02_sub.pyの中のmodu01のみ
#      (from Pythonファイル名(拡張子なし) import インポートしたいモジュール名)
#
from test_import02_sub import module01

maintext = 'Python BANZAI!! Part2'
module01(maintext)

(実行結果)
*****************************
*** Python BANZAI!! Part2 ***
*****************************

ex.3 モジュールごとインポート(別名)

パターン1と同様、モジュールをまるごとインポートする例である。
インポート時、モジュール名を別名にしている。

#
# importする パターン3(パターン1の別名版)
#
#  単純にインポートして別名を付ける
#      test_import02_sub.pyをまるごと
#      (import Pythonファイル名(拡張子なし) as 別名)
#
import test_import02_sub as sub

maintext = 'Python BANZAI!! Part3'
sub.module01(maintext)

(実行結果)
*****************************
*** Python BANZAI!! Part3 ***
*****************************

ex.4 特定の関数のみインポート(別名)

パターン2と同様、関数を指定してインポートする例である。
インポート時、関数名を別名にしている。

#
# importする パターン4(パターン2の別名版)
#
#  モジュールだけインポート
#      test_import02_sub.pyの中のmodu01のみ
#      (from Pythonファイル名(拡張子なし) import インポートしたいモジュール名 as 別名)
#
from test_import02_sub import module01 as mod

maintext = 'Python BANZAI!! Part4'
mod(maintext)

(実行結果)
*****************************
*** Python BANZAI!! Part4 ***
*****************************

import文はわかりやすく
他の言語にも似たような記述があるため
すぐに理解出来た気になるのだが
importする対象において
いくつかパターンがあるので
しっかりと把握しておきたい。

この他にも
複数のモジュールファイルたちを集めて
パッケージ化しておき
それをimportする記述方法もある。
(別途記載する。)

Pythonバンザイ

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