Python の書き方の基本ルール
このページは他のプログラミングの経験のある方向けです。プログラミングは Python が初めてという方は、このページはスキップして次の「Python のデータ型」に進んでも問題ありません。
Python の書き方
Python は習得し易いプログラミング言語です。少なくともそう言われています。
ところが、C/C++ 言語や Java 言語といった他のプログラミング言語を経験してきた人にとっては、 やや違和感のある感じがあるのも確かだと思います。
最初に Python の特徴あるいは基本的なルールをまとめておきます。
次の Python コードを見てください。
x = 1
y = 2
if x < y:
print('True')
else:
print('False')
これを実行すると True を出力します。
if 文による条件分岐をしていますが、その詳細はまた別のページで書きますが、ここではその形式に注目しましょう。
ここでは if 文があり、その条件によって実行されるブロックがあります。 この場合 if 文がヘッダになり、実行ブロックがそのヘッダに付随するステートメントブロックという風に分けられます。
ステートメントブロックは一般的に複数行になります。このように、ヘッダ行 (header line) と、 ネストされたステートメントブロック (nested statement block) の組合せからなるステートメントを、複合文 (compound statement) といいます。
Python では複合文のヘッダー行の終わりのコロン : は必須です。
ステートメントブロックの終わりはインデントの終わり
ヘッダー行は前述の通り、コロン: で終わるまでです。基本的に一行で記述します。
では、ステートメントブロックはどうやって書けばよいでしょうか。
ステートメントブロックは、インデント量を揃えることによって記述します。いくつインデントしなければならない、というものではなく、 ブロックの最初のステートメントのインデントと、同じだけインデントしているステートメント群が、ブロックとみなされます。
例えば、次のようにインデントをそろえることによって、ブロックを記述します。
if x < y:
a = 1 # この行から...
b = 2
c = 3
d = 4 # この行まで。
else:
x = 10 # こちらはこの行から...
y = 20
z = 30 # この行まで。
ちなみに、「同じだけインデント」と書きましたが・・・
if x < y:
a = 1
b = 2
c = 3
d = 4
else:
x = 10
y = 20
z = 30
という風に、バラバラのインデントにして書いても、動くことは動きますが、無意味に異なる量のインデントをしても読みにくくなるだけです。よほどの理由が無い限りやめましょう。
基本的にひとつのインデントレベルは 4 個のスペース (空白文字) で行うことが推奨されています。 Python のスタイルガイドは 「PEP8 -- Style Guide for Python Code」です。
エディターの設定も Python を扱うときにはタブは 4 スペースに置き換えるようにしてください。(タブを使うことは推奨されていません)
制御文での ( ) は任意。だけど書かない
制御文中の条件の記述には C 言語などのように、括弧を付けて書くことも可能です。
if (x < y): # 括弧を付けた
print('true')
else:
print('false')
しかしながら、Python では ( ) を書かないのが普通です。
print()の括弧は Python 3 では必要です。
行末の ; も任意。だけどこれも書かない
それから行末には任意で ; を付けることも可能です。 C 言語や Java に馴染みのある方は思わず付けてしまうと思います。
しかし Python では基本的に一行、一ステートメントという考え方があるので、 ; は基本的に付けません。
上が基本。少し発展編
以上が、Python のコードの書き方の基本的な考え方でした。しかし、以下の場合のような書き方も良いかもしれません。
上でステートメントは一行ずつが基本と書きましたが、() 、[]、{} で囲めば、改行はできます。 これを用いて、以下のようなリストの定義や条件式が複数になり縦揃えの方が見やすい場合などは、こうした書き方を検討するのもよいでしょう。
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
M = [[1, 2, 3], # 改行して縦を揃える
[4, 5, 6],
[7, 8, 9]]
上記では L も M も同じ意味 [[1, 2, 3], [4, 5, 6], [7, 8, 9]] になります。
また条件式が多い場合などは次のように改行してもよいかもしれません。
if a < b and c < d and e < f and g < h:
x = 1
y = 2
if (a < b and # ( を付けて改行
c < d and
e < f and
g < h):
x = 1
y = 2
if で2文字あり、そのあとスペースと ( が続くことで、最初の条件 a<b が 4 文字分インデントされています。