モジュール
モジュールとは Python の定義や文が入っており、接尾語に .py がついたものです。
コードの再利用がしやすくなる。
コードの見通しがよくなる。
といったメリットがあります。
関数の章で作成したdef_sample1.pyもモジュールとして使用できます。
まず def_sample1 をモジュールとして使ってみましょう。
code: sample_module1.py
import def_sample1
def_sample1.greeting()
※上記では同じディレクトリにdef_sample1.pyがある必要があります。
標準モジュール
Pythonをインストールすると、def_sample1のように、便利なモジュールが既に使える状態となっています。
試しに、日付を扱うdatetimeモジュールを呼び出してみましょう。
datetimeモジュールには、dateクラスがあり、その中にtodayメソッドがあります。
今回はそれを呼び出します。
code: sample_module2.py
import datetime
date_class = datetime.date
now = date_class.today()
print(now)
モジュールの呼び出し方
上記の例も含めて主に三種類の方法があります。
code: sample_module3.py
# モジュールだけを呼び出し
import datetime
date_class = datetime.date
now = date_class.today()
print(now)
# 一行でクラスまで呼び出し
from datetime import date
now1 = date.today()
print(now1)
# 別の名前として呼び出し
import datetime as dt
date_class2 = dt.date
now2 = date_class2.today()
print(now2)
モジュールの検索パス
例えば foo という名前のモジュールがある時、インポート時に Python は次のルールで foo モジュールを探します。
入力されたスクリプトのあるディレクトリ (あるいはファイルが指定されなかったときはカレントディレクトリ)。
PYTHONPATH (ディレクトリ名のリスト。シェル変数の PATH と同じ構文)。
インストールごとのデフォルト。
実行している Python がどのようなモジュール検索パスで動作しているかは、sys モジュールを使って知ることができます。
code: sample_module4.py
import sys
print(sys.path)
良く出くわすエラー
ModuleNotFoundError: No module named 'XXXXX'
インポートで指定したモジュールが検索パスにないか、インストールされていない。
NameError: name 'XXX' is not defined
モジュールで定義している関数や変数の指定方法を間違えている(名前間違いのtypo)。
組み込み関数 dir() を使うと、指定したモジュールにどんな名前が定義されているかを知ることができます。
code: sample_module5.py
import datetime
print(dir(datetime))
'MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo' 実践ドリル