タプル: 変更不可のシーケンス
リストと似てるけど変更不可。意図しない変更を防ぐ。
タプル
イミュータブルなシーケンス。
イミュータブル
作成後に変更不可。
アンパック
複数変数に一度に代入。
タプルとは?
「変更できない」というのは不便に思えるかもしれませんが、実は強力なメリットです。辞書のキーとして使えたり、関数から複数の値を安全に返したり、うっかりデータを書き換えてしまうバグを未然に防いだりできます。
# タプルの作成point = (10, 20)rgb = (255, 128, 0)
# アンパックx, y = pointr, g, b = rgb
# イミュータブル(変更不可)# point[0] = 5 # エラー!
# アクセスfirst = point[0]last = rgb[-1]
# 関数から複数の値を返すdef get_user(): return ("Alice", 30, "alice@example.com")
name, age, email = get_user()Bad
# ❌ Bad: リストで変更不要なデータconfig = ["localhost", 8080, True]config[0] = "0.0.0.0" # 意図しない変更Good
# ✅ Good: タプルで不変を保証config = ("localhost", 8080, True)# config[0] = ... # エラーで防止高度な使い方
# 名前付きタプルfrom typing import NamedTuple
class Point(NamedTuple): x: float y: float label: str = ""
p = Point(10, 20, "A")print(p.x, p.y) # 名前でアクセス
# タプルのメソッドnums = (1, 2, 3, 2, 1)nums.count(2) # 2nums.index(3) # 2
# シングルトン(要素1つ)single = (42,) # カンマ必須
# 辞書のキーとして(イミュータブルなので可)cache = {(0, 0): "origin", (1, 0): "east"} Tip: 複数の値を返すときはタプルで。NamedTuple で可読性向上。
合格ライン
タプルのアンパックができる
NamedTuple を使える
演習課題
課題1: アンパック
タプルのアンパックを使ってください。
課題2: NamedTuple
NamedTuple で構造体を作成してください。