複合文とブロック

広告

前ページでも簡単に記載しましたが、複合文とは他の文を内部に持ち、内部の文を実行するかどうかなどの制御をコントールするものです。例えば「if」文では条件式が真の場合にブロック内の文を実行します。「while」文では条件式が真の間ブロック内の処理を繰り返し実行します。

このような複合文は次の構成となっています。

ヘッダ:
    文1
    文2
    ...

複合文ではまず「ヘッダ:」と言う構成になります。「if」文であれば「if 条件式:」となりますし「while」文であれば「while 条件式:」となります。

そして複合文の中に含まれる文はブロックと言う単位にまとめられますが、どこからどこまでを同じブロックとするかについては文の先頭に同じインデント(字下げ)することによって表現します。

つまりPythonでは文の先頭に含まれる空白は重要な意味を持っています。

ヘッダ:
    # ブロック 開始
    文1
    文2
    # ブロック 終了

上記の場合は複合文の中に文1と文2が同じブロックとして含まれています。

ヘッダ:
    # ブロック 開始
    # ブロック 終了
文1
文2

上記の場合は文1と文2はインデントされていませんので複合文とは関係無い単独で実行される文です。

インデントの数は任意の個数で構いません。その代わり同じブロックに含まれる文は同じインデントである必要があります。またインデントはスペースでもタブでも構いません。同じインデントの文が続く限り同じブロック内として扱われますが、別のインデントを持った文が現れるとその文からは別の扱いとなります。

ヘッダ:
    # ブロック 開始
    文1
    文2
    # ブロック 終了
文3

上記では文1と文2は同じ複合文の中に含まれる同じブロック内の文ですが、文3は単独で実行される文です。

複合文の中のブロック内に別の複合文が含まれる場合、内側の複合文に含まれるグループは内側の複合文のヘッダに対してインデントすることで表します。

ヘッダ:
    # ブロック1 開始
    文1
    文2
    ヘッダ:
        # ブロック2 開始
        文3
        文4
        # ブロック2 終了
    # ブロック1 終了
文3

複合文として「if」文を使う場合には次のようになります。

print "Start"
x = 0
y = 1

if x == 0:
  print "x = 0"

  if y == 0:
    print "y = 0"

print "End"

このようにPythonではどの文がどこのブロックに含まれるのかをインデントによって表現しています。その為、自由にインデントを付けてプログラムを記述することは出来ませんが、見た目で表される構造がそのままプログラム内の構造となります。

サンプルコード

では実際に試してみます。

#coding: UTF-8

print "Start"
x = 0
y = 1

if x == 0:
  print "x is 0"

  if y == 0:
    print "y is 0"

  if y != 0:
    print "y is not 0"

print "End"

上記を「test2-1.py」として保存します。保存する時の文字コードはUTF-8です。そして次のように実行して下さい。

複合文とブロック

( Written by Tatsuo Ikura )