1.1 モジュールの紹介
Pythonのモジュールとは、.py拡張子がついたファイルで、 コードを含んでいるものだよ。モジュールを使うと、大きなコードを 小さく管理しやすい部分に分けることができるよ。各モジュールは関数、クラス、 変数を持つことができ、インポート時に特定のコードを実行することもできるんだ。
シンプルなモジュールの例
mymodule.pyを作成するよ:
# mymodule.py
def greet(name):
return f"Hello, {name}!"
pi = 3.14159
これで別のファイルでこのモジュールをインポートして使えるよ。
1.2 モジュールのインポート
Pythonはモジュールをインポートするためのいくつかの方法を提供しているんだ。 順番に見ていこう。
モジュール全体のインポート
この操作の一般的な構文は以下の通りだよ:
import モジュール
この方法はモジュール全体をインポートするんだ。そして、モジュール名を書いてその関数や変数を使うことができる。
import モジュール
print(モジュール.greet("Alice")) # 出力: Hello, Alice!
print(モジュール.pi) # 出力: 3.14159
以前、mathモジュールで何か似たようなことをやったの覚えてる?
import math
print(math.ceil(13 / 7)) # 切り上げ
print(math.floor(13 / 7)) # 切り下げ
モジュールから特定の要素をインポート
モジュールの中のすべてではなく、特定の要素だけをインポートすることもできるよ。この操作の一般的な構文は以下の通りだよ:
from モジュール import func, var
この方法では、モジュールから特定の関数、クラス、または変数だけをインポートして、モジュール名を書かずにそれを使えるようにするんだ。
from mymodule import greet, pi
print(greet("Bob")) # 出力: Hello, Bob!
print(pi) # 出力: 3.14159
ニックネームを使ってモジュールをインポート
この操作の一般的な構文は以下の通りだよ:
import モジュール as alias
この方法はモジュールをインポートして別名を付けることができるんだ。モジュール名が長いときや名前の衝突を避けたいときに便利だね。
import mymodule as mm
print(mm.greet("Charlie")) # 出力: Hello, Charlie!
print(mm.pi) # 出力: 3.14159
モジュールのすべての要素をインポート
この操作の一般的な構文は以下の通りだよ:
from モジュール import *
この方法では、モジュールからすべての関数、クラス、変数をインポートして、モジュール名を書かずに使えるようにするんだ。でも、この方法は名前の衝突を引き起こす可能性があるのでお勧めしないよ。
from mymodule import *
print(greet("Dave")) # 出力: Hello, Dave!
print(pi) # 出力: 3.14159
1.3 インポートプロセスの裏側
モジュールの検索順序
モジュールをインポートすると、Pythonは特定の順番でそれを探すんだ:
- 現在のディレクトリ: Pythonはまず、スクリプトが実行されたディレクトリでモジュールを探すよ。
- 環境変数
PYTHONPATH: 現在のディレクトリで見つからない場合、Pythonは環境変数PYTHONPATHで指定されたディレクトリを探すんだ。 - 標準ディレクトリ: まだ見つからない場合、Pythonは標準ディレクトリ、つまり
sys.pathに指定されているディレクトリを探すよ。
例:
import sys
for path in sys.path:
print(path)
ローカルとグローバルなインポート
モジュールのインポートはグローバルレベル(ファイルの最初)でも、ローカルレベル(関数やメソッドの中)でも行えるよ。
グローバルインポート
グローバルインポートはファイルの最初に行われ、インポートされたモジュールはファイル全体で使えるようになるんだ。
import math
def calculate_circle_area(radius):
return math.pi * radius ** 2
ローカルインポート
ローカルインポートは関数やメソッドの中で行われ、それはその関数やメソッドの中だけでしか使えないよ。
def calculate_square_root(x):
import math
return math.sqrt(x)
print(calculate_square_root(16))
ローカルインポートはモジュールの読み込み時間を短縮したり、名前の衝突を防いだりするのに役立つよ。
1.4 動的インポート
動的インポートはプログラムの実行中にモジュールをインポートすることができるんだ。ユーザーの入力やその他の動的な条件に基づいてモジュールをインポートする必要があるときに便利だよ。
この操作の一般的な構文は以下の通りだよ:
module = __import__("モジュール")
試しにこの方法でmathモジュールをインポートしてみよう。
module_name = "math"
module = __import__(module_name)
print(module.sqrt(16)) # 出力: 4.0
この方法はimport asを使っているようなもので、mathモジュールにmoduleという別名を付けている感じだね。
1.5 getattr関数を使ったモジュールの属性へのアクセス
getattr関数はモジュール(もしくは任意のオブジェクト)から動的に属性を取得することを可能にするんだ。この方法は、属性名が事前に知られていない場合やプログラムの実行中に変更される可能性がある場合に役立つよ。
getattr関数の構文:
getattr(object, name, default = None)
ここでobjectは属性を取得したいオブジェクト、nameは属性名を含む文字列、defaultは指定された名前の属性が存在しない場合に返される値だよ。defaultパラメータのデフォルト値はNoneだね。
getattr関数の使用例:
import math
# mathモジュールからsqrt属性を取得
sqrt_function = getattr(math, 'sqrt')
print(sqrt_function(25)) # 出力: 5.0
# 存在しない属性を取得しようとした場合、デフォルト値を返す
non_existent_attr = getattr(math, 'non_existent', 'default_value')
print(non_existent_attr) # 出力: default_value
この例では、getattr関数を使ってmathモジュールからsqrt関数を取得し、その関数を使って25の平方根を計算するんだよ。指定された名前の属性が存在しない場合には、デフォルト値default_valueが返されるんだ。
GO TO FULL VERSION