セイウチ構文(walrus operator :=)は、「代入しながら式として値を使えるようにする」ための構文です。
Python 3.8で導入されました。
1. 何ができるのか
普通の代入はこうです:
x = len(data)if x > 10: print(x)
セイウチ構文を使うと:
if (x := len(data)) > 10: print(x)
代入と条件判定を一度に書けるのがポイントです。
2. 何のためにあるのか
主な目的は次の3つです。
① 無駄な再計算を防ぐ
# 悪い例if len(data) > 10: print(len(data))
# セイウチ構文if (n := len(data)) > 10: print(n)
→ 同じ処理を2回書かなくて済む
② コードをコンパクトにする
特にループで便利です。
# 従来line = f.readline()while line: print(line) line = f.readline()
# セイウチ構文while (line := f.readline()): print(line)
③ 条件の中で値を使い回せる
if (match := pattern.search(text)): print(match.group())
→ 「判定」と「結果の利用」を同時に書ける
3. 注意点
便利ですが、使いすぎると逆に読みにくくなります。
# これは読みにくいif (a := func1()) and (b := func2(a)) and (c := func3(b)): ...
→ 基本は「シンプルな場面だけ」で使うのが良い
まとめ
セイウチ構文 = 代入しながら値を使う
主な目的:
再計算を減らす
コードを簡潔にする
条件内で値を再利用する
ただし可読性とのバランスが重要
この記事へのコメント