モジュール
モジュールとは、関数やクラス定義を一つのファイルにまとめたものです。
モジュールの使い方
例えば、次のように二つの関数が書かれたファイルを作成して、ファイル名をcalculation.py
とします。
def linear(x):
for i in range(10):
y = 2*x
print(y)
x += 1
i += 1
def squared(x):
for i in range(10):
y = x**2
print(y)
x += 1
i += 1
先ほど書いたモジュールを使用するときは、import ファイル名
という感じで、他のコードから参照することができます。
import calculation
インポートしたモジュールは、ファイル名.定義(引数)
というように書くと参照したコード内で実行することができます。
calculation.linear(1)
2
4
6
8
10
12
14
16
18
20
一度インポートしたら、別の定義も使用することができます。
calculation.squared(1)
1
4
9
16
25
36
49
64
81
100
モジュール内で定義されている名前の取り込み
from モジュール名 import 定義1,定義2,…
というように書くと、モジュールを使用するときは定義名だけで実行することができるようになります。
from calculation import linear, squared
この場合は、linear(引数)
という定義を別のコード内で実行しています。
linear(2)
4
6
8
10
12
14
16
18
20
22
squared(引数)
も先ほど読み込んでいたので使用することができます。
squared(2)
4
9
16
25
36
49
64
81
100
121
モジュール内で定義されている名前を全て取り込み
先ほどと同じ書き方で*
を書くと、モジュール内にあるすべての定義名を使用することができるようになります。
from calculation import *
squared(5)
25
36
49
64
81
100
121
144
169
196
モジュール名を変更
インポートしたモジュール名はimport モジュール as モジュール名
という書き方でコード内で使用する際のモジュール名を変更することができます。長いモジュール名の場合、短くしておくとコードを書きやすくすることができます。
import calculation as cal
cal.squared(10)
100
121
144
169
196
225
256
289
324
361
スプリクトとしての利用方法
スクリプトとは、コマンドライン上で、モジュールを実行させることを言います。基本的には、先ほど書いたモジュールに以下のように、if __name__ == '__main__':
と、実行したい関数を記述することでスクリプトとして使用することができます。
def linear(x):
for i in range(10):
y = 2*x
print(y)
x += 1
i += 1
def squared(x):
for i in range(10):
y = x**2
print(y)
x += 1
i += 1
if __name__ == '__main__':
import sys
linear(int(sys.argv[1]))
スクリプトを使用するときは、コマンドラインで、python スクリプト 引数
で実行することができます。
python calculation02.py 10
20
22
24
26
28
30
32
34
36
38
モジュール検索パスの確認
pprintを使用すると、インポートしたモジュールがどの位置(パス)にあるかを調べることができます。
import calculation
import pprint
pprint.pprint(calculation)
<module 'calculation' from '/Users/ユーザー名/jupyter/calculation.py'>
dir()関数
dir()は、インポートしたモジュールにどんな名前の定義があるかを調べることができます。
import calculation
dir(calculation)
['__builtins__',
'__cached__',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__spec__',
'linear',
'squared']
パッケージ
パッケージとは、複数のモジュールを参照できるようにしたフォルダのことです。パッケージは以下のように__init__.py
を含んだフォルダになっていて、複数のモジュールを入れておくことで、パッケージとして参照することができます。
calculation_package
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-36.pyc
│ └── calculation.cpython-36.pyc
└── calculation.py
パッケージを使用するときは、from パッケージ名 import モジュール名
で使用することができます。
from calculation_package import calculation
calculation.linear(1)