最小限のルールブック
Python が読みやすいと言われる理由の大半は、実は文法ルールが驚くほど少ないことにあります。本当に大事なものだけなら、1ページに収まってしまうくらいです。
- 1行につき1つの文。
- インデントで構造を表す(
{}やendは使わない)。 - 大文字・小文字は区別される。
nameとNameは別物。 :はブロックの始まり。次の行以降、インデントされた部分がブロックの中身。#から始まる行はコメント。
Python の文法ルールは、突き詰めればこれだけ。あとは変数や関数、標準ライブラリの使い方など、書きながら自然に身についていく内容です。ここからは、この5つのルールを「暗記する決まりごと」ではなく「言語の自然な形」として感じられるように、順番に見ていきましょう。
1行につき1つの文
「文(statement)」とは、「これを表示する」「これを足す」「これを代入する」といった、ひとまとまりの命令のことです。Python では、各文をそれぞれ別の行に書きます。
3つの文が、それぞれ3行に分かれていますね。行末にセミコロンをつける必要はありませんし、実際、Pythonのコードではほとんど使われません。(セミコロンで区切れば1行に2つの文を書くことも できます が、スタイルとしてはよろしくないので、やめておきましょう。)
どうしても1行が長くなってしまう場合は、丸カッコ・角カッコ・波カッコの中の自然な位置で改行すればOKです。Pythonは文句を言いません。
あるいは、行末にバックスラッシュを置いて継続するやり方もありますが、これはあまり一般的ではありません。基本的にはカッコで囲む方法を使うのがおすすめです。多くのコードベースでもそうなっています。
インデントは文法の一部
ここが初心者のつまずきポイントです。Pythonでは、行の 先頭 にある空白(インデント)に意味があります。どの行がひとかたまりなのかを、Pythonはこのインデントで判断しているんです。
シンプルな if 文で見てみましょう。
if hour < 12: の次に続く2行は、半角スペース4つ分インデントされていますよね。Pythonはこのインデントを見て、「この2行が if の中身だな」と判断します。最後の print は行頭まで戻っているので、if の外側にあるコードとして扱われます。
インデントを消すと if は動きません。逆に、スペースを1つ余計に入れてしまっても同じくエラーになります。Pythonがここまで厳しいのは、インデント そのもの がコードの構造を表しているからです。{} や end のような目印がない分、インデントが唯一のよりどころなんです。
ここから導ける、python インデント ルールをいくつか挙げておきます。
- インデント1段はスペース4つで統一する。 これはPEP 8 の推奨スタイルで、たいていのエディタも
.pyファイルではこれをデフォルトにしています。 - タブとスペースを混ぜない。 Python 3 では両方が混在したファイルはそもそも受け付けてもらえません。最近のエディタは保存時にタブを自動でスペースに変換してくれるので、その設定になっているか確認しておきましょう。
- IndentationError は必ず遭遇する。 エラーが出たときはメッセージに行番号が書かれているので、その行の先頭の空白が周りの行とそろっているかをチェックしてください。
コロン:でブロックが始まる
ネストされたブロックを作る構文 — if、else、for、while、def、class、with、try — は、どれもヘッダー行の末尾にコロン : を付けます。そしてその次の行からインデントされた部分が、ブロックの中身になります。
ここで注目してほしいポイントは2つ。ヘッダー行末のコロンと、本体の4スペースインデントです。コロンを書き忘れると、Pythonは SyntaxError: expected ':' のようなエラーを出してくれます。このエラーメッセージは原因がはっきりしているので、抜けている記号を補えば解決です。
大文字・小文字の区別
Pythonでは Name、name、NAME はすべて別物として扱われます。これは次のすべてに当てはまります。
- 自分で定義した変数や関数
print、len、True、False、Noneなどの組み込み- モジュール名や属性名
実際にハマるのは、たいてい大文字にしてしまったケースです。True は真偽値のtrueを表しますが、true は未定義の変数なので NameError になります。Print(...) も print 関数ではなく、ただのタイポとして扱われます。
"name 'X' is not defined" というエラーが出て、「いや、定義したはずなんだけど…」と思ったときは、まず大文字・小文字を疑ってください。体感9割はこれが原因です。
# を使ったコメント
1行の中で # 以降に書かれた内容はすべてコメント扱いになり、Pythonは完全に無視します。コメントは、あとでコードを読む人(未来の自分も含む)へのメモとして使います。
Pythonには複数行コメント用の専用構文はありません。何行にもわたってコメントを書きたいときは、# を行ごとに並べてください。(ときどき三重クォートの文字列をコメント代わりに使っているコードを見かけますが、あれは docstring という別物です。関数の章で改めて取り上げます。)
Pythonの予約語一覧
Python自身が使っているため、変数名として使えない単語がいくつかあります。具体的には if、else、for、while、def、class、return、import、from、as、pass、break、continue、True、False、None、and、or、not、in、is、lambda、try、except、finally、raise、with、yield、global、nonlocal、async、await などです。丸暗記する必要はありません。うっかり使えば、その場で Python が怒ってくれます。
これだけ知っていれば、どんなPythonファイルでも読める
ここまで読んできたルールは、2行のスクリプトでも10万行のプロジェクトでも、すべての Python ファイルに等しく当てはまります。この先学ぶ内容も、結局はここで紹介した5つの考え方の上に積み重なっていくだけです。もしコードを見て「わからない……」となったら、まずはインデントに注目してください。各行が何をしているかを読む前に、インデントそのものがコードの構造を教えてくれます。
次はコメントについてもう少し掘り下げます。あわせて、関数やモジュールのドキュメントを書くための仕組みである docstring も紹介していきます。
よくある質問
Pythonはなぜインデントにこだわるの?
Pythonはインデント(行頭の空白)を見て、どの行が同じブロックに属しているかを判断しているからです。他の言語なら { } で囲んで表現するところを、Pythonは先頭のスペースの量で区切ります。見た目はすっきりしますが、その分スペースを適当に入れるとすぐエラーになります。
インデントは何スペースが正解?
コミュニティの標準は「半角スペース4つ」です(PEP 8で推奨)。たいていのエディタはPythonファイルでTabキーを押すと自動で4スペース入れてくれます。数そのものより大事なのは同じブロック内で揃えること。2スペースと4スペースが混ざっていると IndentationError の原因になります。
Pythonは大文字と小文字を区別しますか?
はい、完全に区別します。Name、name、NAME はすべて別の変数です。print や True のような組み込みの名前も表記どおりに書く必要があり、True はOKでも true と書くとエラーになります。