Python 組み込みモジュール
Python 標準ライブラリ(Standard Library)は、多種多様なプログラミングタスクに対応する準備済みのモジュールが収められた巨大なコレクションです。一般的な操作のためにコードを一から書く必要はなく、これらのモジュールをインポートして利用するだけで、開発時間と労力を大幅に節約できます。
本章では、標準ライブラリの中でも不可欠な3つのモジュール、math、datetime、および random を紹介します。これらはそれぞれ、数学計算の実行、日付と時刻の操作、そして乱数の生成に使用されます。
1. モジュールとインポートの復習
具体的なモジュールを掘り下げる前に、モジュールとは何か、そしてどのようにインポートするのかを復習しておきましょう。前のレッスンで学んだ通り、モジュールとは Python の定義や文が含まれたファイルのことです。モジュールを利用することで、コードを再利用可能なコンポーネントに整理でき、コードのモジュール化とメンテナンス性が向上します。
モジュールを使用するには、import 文を使用します。以下は一般的なインポート方法です。
- import モジュール名: モジュール全体をインポートします。関数や変数にアクセスするには、ドット記法(例:
モジュール名.関数名)を使用します。
import math
# 16 の平方根を計算
result = math.sqrt(16)
print(result) # 出力: 4.0- from モジュール名 import 特定の項: モジュール内の特定の関数や変数のみをインポートします。この場合、ドット記法なしで直接使用できます。
from math import sqrt
# 25 の平方根を計算
result = sqrt(25)
print(result) # 出力: 5.0from モジュール名 import *: モジュール内のすべての項目をインポートします。便利ではありますが、名前空間(Namespace)の衝突を引き起こしやすく、コードの可読性を下げるため、通常は推奨されません。
from math import *
# pi の値を使用
result = pi
print(result) # 出力: 3.141592653589793- import モジュール名 as 略称: モジュールを別名(エイリアス)でインポートします。長いモジュール名を短縮したり、名前の衝突を回避したりする際に非常に有用です。
import datetime as dt
# 現在の日時を取得
now = dt.datetime.now()
print(now) # 現在の日時が出力される2. math モジュール:数学関数
math モジュールは、三角関数、対数関数、指数関数、丸め関数など、幅広い数学関数を提供します。また、pi や e といった便利な数学定数も定義されています。
2.1 定数
math.pi: 円周率(π)を表す定数。約 3.14159 です。math.e: 自然対数の底(e、ネイピア数)を表す定数。約 2.71828 です。
import math
print(math.pi) # 出力: 3.141592653589793
print(math.e) # 出力: 2.718281828459045例:円の周長を計算する
import math
radius = 5
circumference = 2 * math.pi * radius
print(circumference) # 出力: 31.415926535897932.2 基本算術関数
math.ceil(x): 切り上げ。x以上の最小の整数を返します。math.floor(x): 切り捨て。x以下の最大の整数を返します。math.fabs(x):xの絶対値を浮動小数点数(float)形式で返します。math.factorial(x):xの階乗を返します。xが整数でない場合や負の場合はValueErrorが発生します。math.fmod(x, y):x / yの剰余を浮動小数点数で返します。
import math
print(math.ceil(4.2)) # 出力: 5
print(math.floor(4.8)) # 出力: 4
print(math.fabs(-5.5)) # 出力: 5.5
print(math.factorial(5)) # 出力: 120 (5*4*3*2*1)
print(math.fmod(10.5, 3)) # 出力: 1.5例:経過日数が何週間分(完全な週)にあたるか計算する
import math
days = 20
weeks = math.floor(days / 7)
print(weeks) # 出力: 22.3 指数・対数関数
math.exp(x): e のx乗 (ex) を返します。math.log(x[, base]): 指定されたbase(底)に対するxの対数を返します。底を指定しない場合は自然対数(底が e)となります。math.log10(x): 常用対数(底が 10)を返します。math.pow(x, y):xのy乗 (xy) を返します(単純な累乗には**演算子が一般的です)。math.sqrt(x):xの平方根を返します。
import math
print(math.exp(2)) # 出力: 7.38905609893065
print(math.log(10)) # 出力: 2.302585092994046
print(math.log(10, 2)) # 出力: 3.3219280948873626 (底が2)
print(math.log10(100)) # 出力: 2.0
print(math.pow(2, 3)) # 出力: 8.0
print(math.sqrt(25)) # 出力: 5.0例:複利を計算する
import math
principal = 1000 # 元本
rate = 0.05 # 利率
time = 5 # 期間(年)
amount = principal * math.pow((1 + rate), time)
print(amount) # 出力: 1276.28156250000042.4 三角関数
math.sin(x):x(ラジアン)の正弦を返します。math.cos(x):x(ラジアン)の余弦を返します。math.tan(x):x(ラジアン)の正接を返します。math.degrees(x): 弧度(ラジアン)から度(ディグリー)に変換します。math.radians(x): 度(ディグリー)から弧度(ラジアン)に変換します。
import math
angle_radians = math.pi / 2 # 90度
print(math.sin(angle_radians)) # 出力: 1.0
print(math.cos(angle_radians)) # 出力: 6.123233995736766e-17 (ほぼ 0)
print(math.degrees(angle_radians)) # 出力: 90.03. datetime モジュール:日付と時刻の操作
datetime モジュールは、日付、時刻、および期間を処理するためのクラスを提供します。イベントログの記録、タスクのスケジューリング、経過時間の計算などに不可欠です。
3.1 コアクラス
datetime.date: 日付(年、月、日)を表します。datetime.time: 時刻(時、分、秒、マイクロ秒)を表します。datetime.datetime: 日付と時刻の両方を表します。datetime.timedelta: 2つの日付や時刻の間の「期間」や「差」を表します。
3.2 オブジェクトの作成
import datetime
# date オブジェクトの作成
d = datetime.date(2023, 10, 27)
print(d) # 出力: 2023-10-27
# time オブジェクトの作成
t = datetime.time(10, 30, 0)
print(t) # 出力: 10:30:00
# datetime オブジェクトの作成
dt = datetime.datetime(2023, 10, 27, 10, 30, 0)
print(dt) # 出力: 2023-10-27 10:30:00
# 現在の日時を取得
now = datetime.datetime.now()
print(now) # 現在のシステム日時3.3 コンポーネントへのアクセス
import datetime
now = datetime.datetime.now()
print(now.year) # 現在の年
print(now.month) # 現在の月
print(now.day) # 現在の日
print(now.hour) # 現在の時
print(now.minute) # 現在の分
print(now.weekday()) # 曜日 (0:月曜日 - 6:日曜日)
print(now.isoweekday())# 曜日 (1:月曜日 - 7:日曜日)3.4 timedelta オブジェクト:日時の算術計算
timedelta は時間差を表し、これを使って日時の加算や減算を行うことができます。
import datetime
# 1日を表す timedelta を作成
one_day = datetime.timedelta(days=1)
# 今日の日付
today = datetime.date.today()
# 明日の日付を計算
tomorrow = today + one_day
print("明日:", tomorrow)
# 1週間前の日付を計算
one_week_ago = today - datetime.timedelta(weeks=1)
print("一週間前:", one_week_ago)3.5 フォーマットとパース:strftime と strptime
strftime(format): 日時オブジェクトを特定の形式の文字列に変換します。strptime(date_string, format): 文字列を解析してdatetimeオブジェクトに変換します。
import datetime
now = datetime.datetime.now()
# datetime オブジェクトを文字列にフォーマット
formatted_datetime = now.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_datetime) # 例: 2023-10-27 14:30:00
# 文字列を解析して datetime オブジェクトに変換
date_string = "2023-11-15"
parsed_date = datetime.datetime.strptime(date_string, "%Y-%m-%d")
print(parsed_date) # 出力: 2023-11-15 00:00:004. random モジュール:乱数生成
random モジュールは、擬似乱数を生成する関数を提供します。統計学的なランダム性が求められるシミュレーション、ゲーム、データサンプリングなどに適しています。
4.1 基本的な乱数関数
random.random(): 0.0 以上 1.0 未満の浮動小数点数を返します。random.randint(a, b):a以上b以下の整数を返します。random.uniform(a, b):a以上b以下の浮動小数点数を返します。
import random
print(random.random()) # 0.0 〜 1.0 の浮動小数点数
print(random.randint(1, 10)) # 1 〜 10 の整数
print(random.uniform(1, 10)) # 1 〜 10 の浮動小数点数4.2 シーケンス関連の関数
random.choice(sequence): リストやタプルなどのシーケンスから要素を1つランダムに返します。random.shuffle(sequence): シーケンスの要素をインプレース(直接)でシャッフルします。random.sample(population, k): 重複なしでk個の要素をサンプリングしたリストを返します。
import random
my_list = [1, 2, 3, 4, 5]
print(random.choice(my_list)) # リストから1つ選択
random.shuffle(my_list) # リストをシャッフル
print(my_list)
print(random.sample(my_list, 3)) # ユニークな3つの要素を抽出4.3 乱数シード (Seed) の設定
擬似乱数生成器を使用しているため、random.seed() でシード値を設定すると、実行のたびに同じ乱数シーケンスを得ることができます(テストやデバッグに有用です)。
import random
# シード値を設定
random.seed(42)
print("1回目:", random.random())
print("1回目:", random.randint(1, 10))
# 同じシード値を再度設定
random.seed(42)
# 上記と全く同じ結果が得られる
print("2回目:", random.random())
print("2回目:", random.randint(1, 10))