アーカイブ
はじめに
弊社では業務でPythonを使用する機会が多く、シンプルで書きやすい言語という印象があります。
一方で、よく見ると他言語ではあまり見かけない独特な文法も多く存在します。
たとえば「インデントが文法になる」「ループに else が付けられる」「内包表記でリストを簡単に生成できる」などは、私自身面白いなと感じたポイントです。
最初は少し違和感があるこれらの構文も、背景を理解するとPythonらしい合理性が見えてきます。
この記事では、Pythonの「ちょっと変わった」文法を整理して紹介します。
基礎となる知識
想定読者は、Pythonをある程度触ったことがある方、他言語経験者でPythonを学び始めた方です。
読み終わるころには「Pythonっぽさ(Pythonic)」が少し見えてくると思います。
Pythonは「シンプルであること」「読みやすさ」を最優先に設計された言語です。
公式の設計哲学「The Zen of Python(PEP 20)」には、次のような言葉があります。
Simple is better than complex.
Readability counts.
つまり、複雑な書き方を減らし、コードの意図が読み取りやすくなるように文法が設計されています。
その結果、他の言語とは少し違った構文がいくつも生まれています。
この記事では、Python 3.10以降を前提に書いています。
match 構文など比較的新しい要素も扱います。
Pythonの独特な文法いろいろ
インデントが文法になる
if True:
print("Hello")
print("World")
Pythonでは {} を使わず、インデントのレベルでブロックを表します。
見た目と構造が一致するため可読性が高くなりますが、スペースとタブを混ぜるとエラーになります。
ループに else が付けられる
for i in range(3):
if i == 2:
break
else:
print("最後まで回りました")
for や while に else を付けられるのはPythonの特徴です。
ループを break せずに最後まで回った場合にのみ、else ブロックが実行されます。
検索処理などで「見つからなかったとき」の処理を書くときに便利です。
ウォルラス演算子(セイウチ演算子) :=
while (line := input()) != "":
print(line)
Python 3.8で導入された「代入式」です。
変数への代入と条件式での評価を1行にまとめられます。
一時変数を作る必要がないため、コードを簡潔にできます。
アンパック代入
a, b = 1, 2
a, b = b, a
Pythonでは複数の変数に同時に代入できます。
一時変数を使わずに値を入れ替えられるのは便利です。
リストや辞書の展開(アンパック)でも同様の仕組みが使われています。
内包表記
squares = [x**2 for x in range(10) if x % 2 == 0]
ループと条件を組み合わせて、リスト・辞書・集合などを1行で生成できます。
簡潔に書けますが、複雑にしすぎると読みにくくなるので注意が必要です。
match 構文(構造的パターンマッチ)
match command:
case ["move", x, y]:
print(f"Move to {x}, {y}")
case ["quit"]:
print("Goodbye!")
Python 3.10から導入された新しい構文です。
値のパターンに応じて分岐できるもので、switch文のように使えます。
リストや辞書の構造を直接比較できるのが特徴です。
まとめ
実際にこれらの構文を使ってみると、Pythonが「人間に読みやすいコード」を目指していることがよく分かります。
特に、内包表記やアンパック代入などは一度慣れると手放せなくなります。
一方で、for + else や match のように、あまり知られていない文法は可読性を損なうこともあります。
慣れない構文を使うときは、チーム全体で理解を共有しておくのが良いでしょう。
Pythonの文法は「シンプルに見えるけど、実は奥が深い」という印象です。
一見クセがある書き方も、「明示的で読みやすくする」という目的のもとに設計されています。
・ インデント構文で見やすく
・ 内包表記で簡潔に
・ ウォルラス演算子で自然な代入
・ match構文で宣言的な分岐
こうした構文を理解して使いこなすと、よりPythonicなコードが書けるようになります。
参考文献
・ The Zen of Python (PEP 20)
・ PEP 572 – Assignment Expressions
・ PEP 634 – Structural Pattern Matching
・ Python公式ドキュメント
積極採用中!尖ったPythonエンジニアへの第一歩はこちらから


