Python 入門

ホーム > 制御文 > 基本的なルール

基本的なルール

Python の書き方 - C 言語ではありません

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 の複合文

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

という風に、バラバラのインデントにして書いても、動くことは動きますが、無意味に異なる量のインデントをしても読みにくくなるだけです。よほどの理由が無い限りやめましょう。

( ) は任意。だけど書かないで

条件文には C 言語などのように、括弧を付けて書くことも可能です。

if ( x < y ): # 括弧を付けた
     print 'true'
else:
     print 'false'

しかしながら、Python では ( ) を書かないのが普通です。(書く場合は後述)

行末の ; も任意。だけどこれも書かない

それから行末には任意で ; を付けることも可能です。 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

ステートメントブロックが 1 行しかない場合は、: に引き続き記述することもしばしば見られます。

if x < y : print 'Hello!'
ホーム > 制御文 > 基本的なルール