標準ライブラリ:Pythonの基本機能を活用する#
はじめに#
前回までの記事では、クラスとオブジェクト指向プログラミングについて学びました。Pythonでクラスを使うと、データと機能をまとめて扱えることがわかりました。今回は、これまでにも何度も登場した「標準ライブラリ」について改めて学びましょう。
Pythonの大きな魅力の一つは、インストールしただけで使える豊富な標準ライブラリです。標準ライブラリを使いこなせると、「車輪の再発明」(すでにある機能を自分でゼロから作ること)を避けて、効率よくプログラミングができるようになります。
標準ライブラリとは?#
「標準ライブラリ」とは、Python本体に付属している機能のパッケージです。つまり、Pythonをインストールしただけで、追加のインストール作業なしに使える便利な機能の集まりです。
標準ライブラリには、以下のようなたくさんの便利な機能が含まれています。
- ファイル操作
- 日付・時刻の処理
- 数学計算
- データ構造(リスト、辞書以外の特殊なもの)
- 乱数生成
- インターネット通信
- など
標準ライブラリの機能を使うには、まず「インポート」という操作を行います。インポートとは、ライブラリに含まれている機能を自分のプログラムで使えるようにする宣言のことです。
# モジュールをインポートする基本的な形
import math
# モジュールの機能を使う
print(f"円周率の値:{math.pi}")
print(f"2の平方根:{math.sqrt(2)}")
円周率の値:3.141592653589793
2の平方根:1.4142135623730951
上記の例では、math
という名前の標準ライブラリをインポートして使っています。math
ライブラリには、円周率(pi
)や平方根を計算する関数(sqrt
)などが含まれています。
インポートの方法#
標準ライブラリをインポートする方法は複数あります。主な方法を見ていきましょう。
1. モジュール全体をインポート:import文#
モジュールを使うには、import
文を使います。基本的な形は次のとおりです。
import モジュール名
モジュール内の機能を使うときは、モジュール名.機能名
という形で使います。
# モジュール全体をインポート
import random
# random モジュールの関数を使う
print(f"1から10の乱数:{random.randint(1, 10)}")
print(f"0以上1未満の乱数:{random.random()}")
1から10の乱数:7
0以上1未満の乱数:0.23942050186581532
2. 特定の機能だけをインポート:from import文#
モジュール全体ではなく、必要な機能だけをインポートすることもできます。そのときはfrom import
文を使います。
from モジュール名 import 機能名
例えば、math
モジュールのpi
とsqrt
だけを使いたい場合は、次のように書けます。
# モジュールから特定の機能だけをインポート
from math import pi, sqrt
# モジュール名なしで直接使用
print(f"円周率:{pi}")
print(f"25の平方根:{sqrt(25)}")
円周率:3.141592653589793
25の平方根:5.0
3. モジュールに別名をつける:as#
モジュールや機能に別の名前(エイリアス)をつけることもできます。これは、名前が長い場合や、名前の衝突を避けたい場合に便利です。
import モジュール名 as 別名
from モジュール名 import 機能名 as 別名
例えば、次のようにします。
# モジュールに別名をつけてインポート
import statistics as stats
# 別名を使って統計関数を呼び出す
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(f"平均値:{stats.mean(data)}")
print(f"中央値:{stats.median(data)}")
print(f"標準偏差:{stats.stdev(data)}")
平均値:5.5
中央値:5.5
標準偏差:3.0276503540974917
statistics
モジュールは、統計的な計算を行うための便利な関数がたくさん含まれています。mean
(平均値)、median
(中央値)、stdev
(標準偏差)などがその一例です。
便利な標準ライブラリを見てみよう#
Pythonの標準ライブラリは非常に豊富です。その中でも特に便利でよく使われるいくつかのライブラリを見ていきましょう。
datetime:日付と時間を扱う#
datetime
モジュールは、日付や時間を扱うための機能を提供しています。日付の計算や表示形式の変更などができます。
# datetimeモジュールのインポート
from datetime import datetime, timedelta
# 現在の日時を取得
now = datetime.now()
print(f"現在の日時:{now}")
# 日付の形式を指定して表示
print(f"年:{now.year}、月:{now.month}、日:{now.day}")
print(f"時:{now.hour}、分:{now.minute}、秒:{now.second}")
# 特定の日時を作成
birthday = datetime(1990, 5, 15, 10, 30, 0)
print(f"誕生日:{birthday}")
# 日時の差分を計算
age_days = (now - birthday).days
age_years = age_days // 365
print(f"生まれてから約 {age_days} 日経過")
print(f"年齢は約 {age_years} 歳")
# 日時を加減算する
tomorrow = now + timedelta(days=1)
print(f"明日の今頃:{tomorrow}")
yesterday = now - timedelta(days=1)
print(f"昨日の今頃:{yesterday}")
# 日付の書式変更
formatted_date = now.strftime("%Y年%m月%d日 %H時%M分%S秒")
print(f"日本語形式:{formatted_date}")
formatted_date2 = now.strftime("%A, %B %d, %Y")
print(f"英語形式:{formatted_date2}")
現在の日時:2025-05-01 14:45:23.456789
年:2025、月:5、日:1
時:14、分:45、秒:23
誕生日:2000-05-15 10:30:00
生まれてから約 9117 日経過
年齢は約 24 歳
明日の今頃:2025-05-02 14:45:23.456789
昨日の今頃:2025-04-30 14:45:23.456789
日本語形式:2025年05月01日 14時45分23秒
英語形式:Thursday, May 1, 2025
datetime
モジュールは、多くのアプリケーションで必要となる日付処理を簡単に行えるようにしてくれます。予定管理アプリ、ブログの投稿日時管理、年齢計算など、さまざまな場面で役立ちます。
collections:特殊なデータ構造#
collections
モジュールは、標準のリストや辞書を拡張した特殊なデータ構造を提供しています。特に、Counter
(要素の出現回数を数える)やdefaultdict
(存在しないキーに対するデフォルト値を設定できる辞書)が便利です。
# collectionsモジュールから特定のクラスをインポート
from collections import Counter, defaultdict, deque
# Counter: 要素の出現回数をカウント
text = "mississippi"
counter = Counter(text)
print(f"文字の出現回数: {counter}")
# 最も一般的な要素
print(f"最も多い文字: {counter.most_common(1)}")
# 上位3つの要素
print(f"上位3つの文字: {counter.most_common(3)}")
# defaultdict: 存在しないキーに対するデフォルト値を設定
# int()は引数なしで呼び出すと0を返す
word_count = defaultdict(int)
# テキスト内の単語の出現回数をカウント
text = "apple orange banana apple grape banana apple"
for word in text.split():
word_count[word] += 1
print(f"単語の出現回数: {dict(word_count)}")
# 存在しないキーにアクセスしても、デフォルト値が返される
print(f"存在しない単語 'melon': {word_count['melon']}")
文字の出現回数: Counter({'i': 4, 's': 4, 'p': 2, 'm': 1})
最も多い文字: [('i', 4)]
上位3つの文字: [('i', 4), ('s', 4), ('p', 2)]
単語の出現回数: {'apple': 3, 'orange': 1, 'banana': 2, 'grape': 1}
存在しない単語 'melon': 0
collections
モジュールが提供するデータ構造は、特定の用途に最適化されていて、コードを簡潔かつ効率的にしてくれます。
time:時間の測定と制御#
time
モジュールは、時間に関する様々な機能を提供します。プログラムの一部分の実行時間の測定や、処理に遅延を加えるのに便利です。特にtime.sleep()
は、プログラムを一定時間停止させたいときに便利です。
import time
# 処理時間の測定
print("処理時間を測定します...")
start_time = time.time() # 処理前の時刻
# 時間がかかる処理(ここでは単純なループ)
sum_value = 0
for i in range(1000000):
sum_value += i
end_time = time.time() # 処理後の時刻
elapsed = end_time - start_time
print(f"処理にかかった時間: {elapsed:.6f}秒")
# プログラムの一時停止
print("3秒間待機します...")
time.sleep(3)
print("待機終了")
# 次のような使い方もできる(タイマーのようなもの)
def countdown(seconds):
while seconds > 0:
print(f"{seconds}...")
time.sleep(1)
seconds -= 1
print("時間です!")
print("カウントダウンを開始します")
countdown(5)
処理時間を測定します...
処理にかかった時間: 0.126323秒
3秒間待機します...
待機終了
カウントダウンを開始します
5...
4...
3...
2...
1...
時間です!
random:乱数生成#
random
モジュールは、乱数(ランダムな数値)を生成するための機能を提供します。ゲームやシミュレーション、データのランダムなサンプリングなどに便利です。
import random
# 指定範囲の整数の乱数
print(f"1から10のランダムな整数: {random.randint(1, 10)}")
# 0以上1未満の浮動小数点数
print(f"0以上1未満のランダムな浮動小数点数: {random.random()}")
# リストからランダムに要素を選択
fruits = ['りんご', 'バナナ', 'オレンジ', 'ぶどう', 'メロン']
print(f"ランダムに選んだ果物: {random.choice(fruits)}")
# リストをランダムにシャッフル
numbers = [1, 2, 3, 4, 5]
random.shuffle(numbers)
print(f"シャッフルした数字: {numbers}")
# リストから重複なしでランダムに複数の要素を選択
selected = random.sample(fruits, 3)
print(f"選ばれた3つの果物: {selected}")
1から10のランダムな整数: 3
0以上1未満のランダムな浮動小数点数: 0.7254611151489845
ランダムに選んだ果物: バナナ
シャッフルした数字: [3, 1, 5, 2, 4]
選ばれた3つの果物: ['りんご', 'ぶどう', 'メロン']
Pythonには他にも多くの標準ライブラリがあります。必要な機能があるかどうかは、公式ドキュメント↗ や様々な記事を参考にして調べてみてください。
まとめ#
この記事では、Pythonに標準で備わっている便利なライブラリについて学びました。
- 標準ライブラリは、Python本体に付属している機能のパッケージで、追加インストールなしで使える
- インポートの方法にはいくつかあり、用途に応じて使い分ける
- datetimeモジュールは日付と時間を扱うのに便利
- collectionsモジュールは特殊なデータ構造を提供
- timeモジュールは時間測定や遅延に役立つ
- randomモジュールは乱数生成に便利
標準ライブラリを知っていると、自分でゼロから機能を作らなくても、すでにあるツールを活用してより効率的にプログラミングができるようになります。「こんなことができたらいいな」と思ったら、まずは標準ライブラリに同様の機能がないか調べてみましょう。
次回は、Pythonをさらに拡張する「外部ライブラリ」について学んでいきます。外部ライブラリを使うと、より専門的で高度な機能をプログラムに追加できるようになります。