モジュールについて学んでいきましょう。
モジュールを一言で言うと、ファイルです。
そして、ファイルの中には関数が格納されています。(厳密には、関数だけではなく、変数なども入れることができます。)
そして、他のモジュールを読み込むことによって、そのモジュールに入っている関数などが使えるようになります。
モジュールを使う理由
モジュールはフォルダによるファイル管理と同じです。
目的によってフォルダを使い分けるのと同じように、目的によってモジュールを使い分け、効率的にプログラムを組むことを可能にしています。
例えば、機械学習をするのであれば、機会学習をする上で重要な関数がまとめられたモジュールがあります。
機械学習を行なうエンジニアは、このモジュールを使うことで簡単に機械学習を行なうことが可能になるのです。
モジュールの使い方
ここから、モジュールの使い方をみていきましょう。
モジュール(ファイル)を読み込むためには、import文を使います。
実際にモジュールを作って、動きをみてみましょう。
コード-adder.py
1 def add(a, b):
2 print(a + b)
3 return
adder.pyというファイルを作りました。このファイルには、addという関数が定義されています。
コード1 import adder
2 adder.add(7, 8)
アウトプット15
コードの解説(1) 1行目でimport adderとし、adder.pyファイルを読み込みました。これで、adder.pyファイルの中で定義されている関数を使うことができるようになります。
(2) 2行目で、adder.addという形でadd関数を呼び出しました。今回は7と8を引数としていますので、足された15が返ってきます。
importの違う表現方法
ここからは、importを違う形で表現してみましょう。
コード-adder.py
1 def add(a, b):
2 print(a + b)
3 return
コード1 from adder import add
2 add(7, 8)
アウトプット15
ここで、from adder import addと書かれている所に注目して下さい。
先程はimport adderとし、adder.pyファイルのすべての関数を使えるようにしましたが、今回はfrom adder import addという形で、adderモジュールからadd関数だけを読み込むという形にしています。
そして、このように具体的に定義をすると、関数を呼び出す時も表記を簡単にすることができます。
2行目を見てみると、add(7, 8)という記載になっています。
import adderの場合は、adder.addとモジュールを指定しなければいけませんでしたが、import addと具体的な関数を指定することによって、adderを省略することができました。
import *は使わない
一方、*を使うことによって、モジュールの全ての関数などを取り込むことができます。
しかし、実際にコードを書く上で*を使うことはオススメされていません。
なぜかというと、*を使うと予想していなかった関数や変数も取り込んでしまうので、既存のコードと干渉しあってしまう可能性が高くなってしまうからです。
*は使わず、必要な関数・変数だけを取り込むようにしましょう。
モジュール名は__name__変数に格納されている
コードを見ている中で、__name__=__main__というのを見たことがあるかもしれませんね。
この__name__というのは、モジュールの名前を意味しています。
__main__というのは、実行ファイルと呼び出された__name__が同じファイルの時に表示される名前なのですが、これでは抽象的で分かりづらいですよね。
詳細は別の記事でまとめましたので、理解を深めたい方は__name__=__main__の使い方を分かりやすく解説という記事を参考にしてみて下さい。
モジュールのまとめ
(1) モジュールはファイルのようなもの
(2) モジュールには関数や変数が入っており、import文でモジュールを組み込むことによって、関数や変数を使うことができるようになる。
(3) 取り込むモジュールや関数・変数は必要なものだけにする。全てimportすると既存のコードと干渉しあってしまう。
モジュールを学んだ後は
モジュールを少し抽象的に理解するために必要な名前空間とスコープについて学んでいきましょう。