Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonモジュールの仕組みを徹底解説!importの基本と使い方を実例で学ぼう

Pythonでは、関数や変数などの定義(definition)をひとつのファイルにまとめ、それをスクリプトやインタラクティブな対話シェルの中で再利用することができます。このような定義を格納したファイルのことを「モジュール(module)」と呼びます。

モジュールとは何か

モジュール内に書かれた定義は、他のモジュールにインポートして利用できますし、メインモジュールに読み込むことも可能です。ここでいうメインモジュールとは、トップレベルで実行されるスクリプトや、電卓モード(対話モード)でアクセスできる変数群のことを指します。

モジュールが見つかる仕組み:検索パス

例えば hello というモジュールをインポートすると、Pythonインタプリタは以下の順序でファイルを探します。

  1. 入力されたスクリプトが置かれているディレクトリ内の hello.py
  2. 環境変数 PYTHONPATH で指定されたディレクトリの一覧

この検索順序を理解しておくと、「モジュールが見つからない」というエラーが発生したときのトラブルシューティングにも役立ちます。

実際にモジュールを作ってみよう

まず、fibonacci.py という名前のファイルを作成し、次のコードを入力します。フィボナッチ数列を出力する関数と、リストとして返す関数の2つを定義しています。

def fib(n):    # n未満のフィボナッチ数列を表示する
    a, b = 0, 1
    while b < n:
        print(b, end=' ')
        a, b = b, a+b
    print()

def fib2(n):   # n未満のフィボナッチ数列をリストで返す
    result = []
    a, b = 0, 1
    while b < n:
        result.append(b)
        a, b = b, a+b
    return result

ターミナルからモジュールを使う

続いて、ターミナルを開き、cd コマンドでこのファイルがあるディレクトリへ移動します。その状態でPythonシェルを起動し、以下のように入力してみましょう。

>>> import fibonacci
>>> fibonacci.fib(1000)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>> fibonacci.fib2(100)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

まとめ

このように、import 文を使えば自作のモジュールを読み込み、モジュール名.関数名() の形式でその中の関数を呼び出せます。コードを機能ごとのファイルに分割してモジュール化することで、プログラムの再利用性・保守性・可読性が大きく向上します。まずは小さな関数集をモジュールとして作り、実際にインポートして試してみるのがおすすめです。

  1. PythonのBokehで画像を操作・表示する方法

    Pythonの可視化ライブラリBokehで画像を扱うには、image_url()メソッドを使い、画像URLのリストを渡すのが基本です。このメソッドを使うことで、ローカルやWeb上にある画像をプロット領域内に簡単に配置できます。実装の手順output_file()でデフォルトの出力先を設定し、show()を呼び出したときに結果がHTMLファイルとして保存されるようにします。figure()でプロット用の新しいFigure(図)オブジェクトを作成します。image_url()メソッドで、指定したURLから読み込んだ画像を描画します。show()を呼び出して、Bokehオブジェクトやアプリケーション

  2. Pythonで与えられた数値がフィボナッチ数かどうかを判定する方法

    本記事では、与えられた数値がフィボナッチ数であるかどうかを判定する問題の解決策について解説します。 問題の定義 ある数値 n が与えられたとき、その数値がフィボナッチ数であるかどうかを判定します。 第 n 項のフィボナッチ数は、直前の2つのフィボナッチ数の和として定義されることは広く知られています。しかし、フィボナッチ数列には漸化式以外にも興味深い数学的性質があります。 フィボナッチ数の判定条件 ある数値 n がフィボナッチ数であるのは、「5×n² + 4」または「5×n² − 4」のいずれかが完全平方数であるとき、かつそのときに限る この性質を利用すれば、フィボナッチ数列を実際に生成しなくて