5. モジュール#
モジュールとは、Pythonのプログラムが記述されたテキストファイル(拡張子は.py)である。モジュールの主な使い方は以下の3つである。
コマンドラインからスクリプトとして実行する
他のモジュールやJupyter Notebookから利用する
(標準も含めて)インストールされているモジュール利用する
まず、2と3を紹介し、その後1を紹介する。
5.1. 他のモジュールの取り込み#
別のファイルに書かれているPythonプログラムを利用するには、import文を使う。例えば、以下のソースコードがoptim.pyというファイルに書かれていて、実行しているJupyter Notebookと同じディレクトリにそのファイルが置かれているとする。
def bisection(func, a, b, eps=1e-8):
while True:
x = (a + b) / 2
fx = func(x)
if -eps < fx < eps:
return x
fa = func(a)
if fx * fa < 0:
b = x
else:
a = x
def newton_raphson(func_f, func_g, x=0, eps=1e-8):
while True:
fx, gx = func_f(x), func_g(x)
if -eps < fx < eps:
return x
x -= fx / gx
このソースコードでは、bisectionとnewton_raphsonという2つの関数が定義されており、それぞれ二分法とニュートン・ラフソン法を実装している。optim.pyに書かれているbisection関数を呼び出すとき、何もせずにbisection関数を呼び出すとエラーになる。
def f(x):
return x ** 2 + 2 * x - 3
bisection(f, -2, 2)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_204933/130988965.py in <module>
2 return x ** 2 + 2 * x - 3
3
----> 4 bisection(f, -2, 2)
NameError: name 'bisection' is not defined
optim.pyのプログラムをインタプリタに取り込むには、import文を使う。このとき、optim.pyで定義されている関数や変数は先頭にoptim.
を付けることでアクセスできる(optimという名前空間で取り込まれる)。
import optim
optim.pyのbisection関数はoptim.bisection
という名前で呼び出すことができる。
def f(x):
return x ** 2 + 2 * x - 3
optim.bisection(f, -2, 2)
1.0
同様に、optim.pyのnewton_raphson関数はoptim.newton_raphson
という名前で呼び出すことができる。
def f(x):
return x ** 2 + 2 * x - 3
def g(x):
return 2 * x + 2
optim.newton_raphson(f, g, 0)
1.000000000000002
5.1.1. fromを使ったインポート#
先ほどの方法では、optim.pyで定義されている関数がoptimという名前空間に取り込まれた。名前空間を付けずに、関数をそのまま(現在の名前空間に)取り込むには、from文を用いる。以下は、optim.pyのbisection関数を取り込む例である。
from optim import bisection
すると、optim.pyで定義された関数をそのまま(optim.
なしで)呼び出すことができる。
bisection(f, -2, 2)
1.0
newton_raphson関数は現在の名前空間に取り込まれていないので、呼び出すことができない。
newton_raphson(f, g, 0)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_204933/3347386978.py in <module>
----> 1 newton_raphson(f, g, 0)
NameError: name 'newton_raphson' is not defined
optim.pyのbisection関数、newton_raphson関数を現在の名前空間に取り込む。
from optim import bisection, newton_raphson
newton_raphson(f, g, 0)
1.000000000000002
optim.pyの全ての識別子(関数や変数など)を取り込む。
from optim import *
newton_raphson(f, g, 0)
1.000000000000002
5.1.2. 名前空間の変更#
import文を呼び出したとき、通常はモジュールのファイル名が名前空間となるが、それを変更するにはasを使えばよい。
import optim as opt
opt.bisection(f, -2, 2)
1.0
opt.newton_raphson(f, g, 0)
1.000000000000002
5.2. インストールされたモジュールの利用#
Pythonには標準でインストールされているモジュール(Python標準ライブラリ)がある。これらのモジュールを利用するときもimport文を用いる。
以下は、mathモジュールをインポートして、\(\sqrt{2}\)を計算する例である。
import math
math.sqrt(2)
1.4142135623730951
5.3. コマンドラインからの実行#
Jupyter Notebookやその前身のIPython Notebookが登場する前までは、Pythonのプログラムを.pyのファイルに記述し、コマンドライン等から実行することが基本であった。例えば、以下のソースコードがoptim2.pyというファイルに書かれているとする。
def bisection(func, a, b, eps=1e-8):
while True:
x = (a + b) / 2
fx = func(x)
if -eps < fx < eps:
return x
fa = func(a)
if fx * fa < 0:
b = x
else:
a = x
def newton_raphson(func_f, func_g, x=0, eps=1e-8):
while True:
fx, gx = func_f(x), func_g(x)
if -eps < fx < eps:
return x
x -= fx / gx
if __name__ == '__main__':
print(bisection(f, -2, 2))
print(newton_raphson(f, g, 0))
このプログラムを起動したときに実行する処理は、if __name__ == '__main__':
のブロック以下に記述する。このプログラムをコマンドラインから実行するには、
python optim2.py
とすればよい。Jupyter Notebook上でコマンドを実行するには、先頭に!
を付ければよい。
!python optim2.py
1.0
1.000000000000002