Python応用

Pythonのセイウチ演算子のススメ::= を使いこなして読みやすいコードを書こう

「変数に代入しながら条件チェックもしたい…でも2行書くの、ちょっとくどいよな」🙄

そんなふうに感じたことありませんか?実はPython 3.8から、それをスッキリ解決できる構文が登場しています。それがセイウチ演算子(:=)です!

🦭 セイウチ演算子ってなに?

python programming
python programming / Photo by Myburgh Roux via Pexels

セイウチ演算子(:=)は、正式には代入式(assignment expression)と呼ばれます。名前の由来は見た目。:= がセイウチの顔に見えることから、このニックネームがついたんですよね😄

ざっくり一言でいうと、「式の中で変数に代入しつつ、その値をそのまま使える」構文です。

イメージとしては、代入と条件判定を1行にまとめる魔法のような演算子、と思ってもらえれば大丈夫です。

📝 具体的なコード例で確認しよう

たとえば、こんなシーンを考えてみましょう。リストから条件を満たす値を取り出して処理したいとき、従来はこう書いていたはずです。

# 従来の書き方
data = [5, 12, 3, 18, 7]

for value in data:
    result = value * 2  # まず計算して変数に代入
    if result > 20:     # その後で条件チェック
        print(result)

これ、result の代入と条件チェックが別々の行になっていますよね。セイウチ演算子を使うとこうなります👇

# セイウチ演算子を使った書き方
data = [5, 12, 3, 18, 7]

for value in data:
    if (result := value * 2) > 20:  # 代入しながら条件チェック!
        print(result)

ポイントをまとめるとこんな感じです。

  • result := value * 2 で計算結果を result に代入
  • ✅ 同時にその値で > 20 の条件チェック
  • ✅ 1行でスッキリ!

⚠️ 使いどころを間違えると読みにくくなることも

ただし注意が必要です。セイウチ演算子は使い方を誤ると逆に読みにくいコードになります

次のような「なんでもかんでも1行にまとめる」使い方はオススメしません。

# ❌ やりすぎな例(可読性が下がる)
while chunk := file.read(8192):
    if (n := len(chunk)) > 100:
        process(chunk, n)

こんなふうに複数のセイウチ演算子を詰め込むと、読む側が一瞬「え、どこで何が代入されてるの?」と混乱しますよね。

使い時のざっくりした判断基準はこちらです。

  • 🟢 使って良い場面:同じ計算結果を「条件チェック」と「本文処理」の両方で使いたいとき
  • 🟢 使って良い場面while ループで読み込みながら終了条件を判定したいとき
  • 🔴 避けたほうが良い場面:1行に詰め込みすぎて意味が追いにくくなるとき

まとめ


セイウチ演算子(:=)は、Python 3.8以降で使えるとても便利な構文です。「式の中で代入できる」というシンプルなルールを押さえておくだけで、ループや条件式がスッキリ書けるようになります。

ただし、コードの読みやすさが一番大事。「1行にまとめられるから使う」ではなく「読みやすくなるから使う」という視点を忘れずに活用してみてください😊

ぜひ自分のコードのどこかに取り入れて、試してみてくださいね!🦭

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る

Python Web開発実践入門 ―― FastAPIによるWebAPI開発と非同期処理

もしも

Python Web開発実践入門 ―― FastAPIによるWebAPI開発と非同期処理

FastAPIでWebAPI開発を実践的に学ぶ

Amazonで見る

ESP32&Arduino 電子工作 プログラミング入門

もしも

ESP32&Arduino 電子工作 プログラミング入門

ESP32とArduinoで電子工作を学ぶ入門書

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です