5-1. モジュールの使い方

モジュールの使い方について説明します。

参考

モジュールのインポート

Pythonでは特別な関数や値をまとめたもの(これをモジュールといいます)を使うために、import という文を使います(第1回 (1-1) においても説明しました)。具体的には次のように記述します。

import モジュール名

たとえば、数学関係の機能をまとめた math というモジュールがあります。これらの関数や値を使いたいときは、以下のようにして math モジュールを importインポートします。そうすると、math.関数名 という形で関数を用いることができます。

[1]:
import math# importは大抵セルの一番上に記述します
print(math.sqrt(2)) # sqrt は平方根を計算する関数
print(math.pi) # πの値
print(math.sin(math.pi/4)) # sin関数
print(math.cos(0)) # cos関数
print(math.log(32,2)) # 2を底とする32の対数(texで記述すると、$\log_2 32$)
1.4142135623730951
3.141592653589793
0.7071067811865475
1.0
5.0

上の例では、math モジュールの中の関数や値を使用しています。

注意しなければならないのは、モジュールの中の関数を使う場合には、

モジュール名.モジュールの中の関数名

とする必要があるということです。

モジュールの中の値(たとえば math.pi)も同様です。

なお、複数の関数名をコンマ , で区切って並べて同時にインポートすることもできます。

from

モジュール内で定義されている関数を「モジュールの中の関数名」のようにして、「モジュール名.」を付けずにそのままの名前で、モジュールの読み込み元のプログラムで使いたい場合には、from を以下のように書くことで利用することができます。

from モジュール名 import モジュールの中の関数名

たとえば、次のようになります。

[2]:
from math import sqrt
print(sqrt(2)) # sqrt は平方根を計算する関数
from math import pi
print(pi) # πの値
from math import sin
print(sin(math.pi/4)) # sin関数
from math import cos
print(cos(0)) # cos関数
from math import log
print(log(32,2)) # 2を底とする32の対数(texで記述すると、$\log_2 32$)
1.4142135623730951
3.141592653589793
0.7071067811865475
1.0
5.0

この方法では、関数ごとに from を用いてインポートする必要があります。

なお、関数だけではなく、グローバル変数や後に学習するクラスも、 このようにしてインポートすることができます。

別の方法として、ワイルドカード * を利用する方法もあります。

from math import *

この方法ではアンダースコア _ で始まるものを除いた全ての名前が読み込まれるため、明示的に名前を指定する必要はありません。

[3]:
from math import *
print(factorial(5)) # 5 の階乗 # import mathを使う場合、math.factorial(5)
print(floor(2.31)) # 2.31以下の最大の整数  # import mathを使う場合、math.floor(2.31)
print(e) # ネイピア数 # import mathを使う場合、math.e
120
2
2.718281828459045

ただしこの方法は推奨されていません。理由は読み込んだモジュール内の未知の名前とプログラム内の名前が衝突する可能性があるためです。

[4]:
pi = 'パイ' # piという変数に文字列「パイ」を代入する
print(pi)
from math import *
print(pi) # mathモジュールのpiの値で上書きされる(衝突)
パイ
3.141592653589793

as

モジュール名が長すぎるなどの理由から別の名前としたい場合は、as を利用する方法もあります。 たとえば、5-3において学習するNumPyというライブラリは numpy モジュールとして提供されていますが、 次のように、 numpynp という略称で使うことがあります。

[5]:
import numpy
print(numpy.ones((3, 5))) # 3×5の行列を表示
import numpy as np
print(np.ones((3, 5))) # np という短い名称で同じ関数を利用する
[[1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]]
[[1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]]

個々の関数ごとに別の名前を付けることもできます。

[6]:
import math
print(math.factorial(5)) # 階乗を求める関数factorial # 5の階乗
from math import factorial as fact # fact という名前でmath.factorialを使用したい
print(fact(5))
120
120

練習

第1回では、数学関数を以下のようにインポートし、math.sqrt() のようにして、数学関数や数学関係の変数を利用していました。

import math
print(math.sqrt(2))
print(math.sin(math.pi))

以下のセルを、モジュール名を付けないでこれらの関数や変数を参照できるように変更してください。

[7]:
import ...
...

print(sqrt(2))
print(sin(pi))
  File "/tmp/ipykernel_5781/684748096.py", line 1
    import ...
           ^
SyntaxError: invalid syntax

練習の解答

from を使ってモジュールを指定、参照する関数を import でインポートしてください。

[8]:
from math import sqrt, sin, pi
print(sqrt(2))
print(sin(pi))
1.4142135623730951
1.2246467991473532e-16