6.モジュール
Pythonで長いプログラムを書く際、コードの再利用やメンテナンスを考えると、コードをいくつかのファイルに分割し、それらをモジュールとして扱うのが効率的です。モジュールは、Pythonのコードをまとめたファイルで、他のスクリプトやモジュールから簡単に再利用できます。
6.1 モジュールの定義とインポート
モジュールは、Pythonの定義(関数、変数など)をまとめた .py ファイルです。例えば、以下のようなファイル fibo.py を作成します:
# Fibonacci numbers module
def fib(n): # write Fibonacci series up to n
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a+b
print()
def fib2(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while a < n:
result.append(a)
a, b = b, a+b
return result
次に、このモジュールをPythonインタプリタで使用するには、import文を使います。
>>> import fibo
このインポートは、モジュール fibo 内で定義された関数や変数を参照可能にします。ただし、モジュール名を使ってアクセスする必要があります。
>>> fibo.fib(1000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>> fibo.fib2(100)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
よく使用する関数があれば、ローカル名に割り当てることもできます。
>>> fib = fibo.fib
>>> fib(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
6.1.1 モジュールの初期化
モジュールには関数定義に加え、初期化用のコードを含めることができます。インポートされたときにこのコードは1回だけ実行されます。
6.1.2 他のモジュールをインポート
モジュールは他のモジュールをインポートできます。通常、import文はモジュールの先頭に書かれます。
import sys
import os
6.1.3 名前空間の操作
特定の関数だけをインポートするには、以下のようにします。
from fibo import fib, fib2
fib(500)
また、モジュール名を別の名前でインポートすることも可能です。
import fibo as f
f.fib(500)
6.2 コンパイル済みファイル
Pythonは、モジュールの読み込みを高速化するために、コンパイル済みの .pyc ファイルを自動的に作成します。
これにより、次回以降のインポート時にモジュールの読み込みが速くなります。
6.3 標準モジュール
Pythonには多くの標準モジュールが同梱されており、sysモジュールやosモジュールなどはその例です。
標準モジュールは、Pythonインタプリタに直接ビルトインされているため、即座に利用可能です。
import sys
sys.ps1 = 'C> '
6.4 dir() 関数
dir()関数を使うと、モジュールが定義している名前の一覧を取得できます。
>>> import fibo
>>> dir(fibo)
['__name__', 'fib', 'fib2']
引数を指定しない場合、現在の名前空間にあるすべての名前が返されます。
>>> dir()
['__builtins__', '__name__', 'fibo', 'sys']