目標
「単純文」と「複合文」について理解する。
単純文と複合文
前回は「式」と「文」の違いについて確認しました。
- 「式」…値を返すものを式と呼びます。
- 「文」…処理を行うものを文と呼びます。
この内、「文」は大きくふたつに分けることができ、ひとつを「単純文」、もうひとつを「複合文」と言います。
単純文
単純文のリファレンス
単純文に関するPythonのリファレンスは下のURLから確認できます。
https://docs.python.org/ja/3.11/reference/simple_stmts.html
単純文の種類
単純文には次のものがあります。
式文、代入文(累算代入文なども代入文です)、assert文、break文、continue文、del文、global文、import文、nonlocal文、raise文、return文、yield文
# —–式文—–
文として働く式のことです。
例:print(‘この式は文です’)
# —–代入文—–
代入を行う文のことです。
例:hensuu = 5、hensuu += 5
# —–assert文—–
デバッグ用アサーション (debugging assertion) を設定するための文です。指定した式がFalseのときに「AssertionError」が送出されます。
文法:assert 式
文法:assert 式1, 式2
下は「assert 式1, 式2」を利用しています。式1に条件式。式2に条件式がFalseの時に処理される処理(スイート)を記述します。
input_value = input('値を入力してください:')
assert input_value != '', print('入力された値は空です。')
実行結果(文字を入力した場合)
実行結果(文字を入力しなかった場合)
# —–break文—–
break文はif文やwhile文の中の処理を抜けるために利用されます。処理を抜ける文としては、他に「return文」がありますが、「return文」は関数の中で利用され、指定した値を関数の呼び出し元まで戻して処理を抜けます。それに対して、「break文」は利用されている文の節がある同じ階層のスイートの集まりからのみ抜けます。(下のプログラムでは水色の枠部分を抜けます。)
break 文は、構文としては for ループや while ループの内側でのみ出現することができますが、ループ内の関数定義やクラス定義の内側には出現できません。
break 文は、文を囲う最も内側のループを終了させ、ループにオプションの else 節がある場合にはそれをスキップします。
for ループを break によって終了すると、ループ制御ターゲットはその時の値を保持します。
break が finally 節を伴う try 文の外側に処理を渡す際には、ループを実際に抜ける前にその finally 節が実行されます。
https://docs.python.org/ja/3/reference/simple_stmts.html#the-break-statement
サンプルプログラム
input_value = int(input('数値を入力してください:'))
def break_return(int_value):
for counter1 in range(1, int_value):
print('{}回目の繰り返しです。'.format(counter1))
for counter2 in range(1, int_value):
print('内側のカウント:{}'.format(counter2))
if counter2 == 3:
break
else:
pass
break_return(input_value)
実行結果
if文内で「counter2」が「3」となるタイミングで「break文」を利用して、内側の繰り返し部分から処理を抜けています。(return文も同様のプログラムを利用して違いを確認しています。)
# —–continue文—–
continue文では繰り返しの文で利用されます。条件に合うときに処理をスキップするときに利用されます。
continue 文は for ループや while ループ内のネストで構文法的にのみ現れますが、ループ内の関数定義やクラス定義の中には現れません。 continue 文は、文を囲う最も内側のループの次の周期に処理を継続します。
continue が finally 句を持った try 文を抜けるとき、その finally 句が次のループサイクルを始める前に実行されます。
https://docs.python.org/ja/3/reference/simple_stmts.html#the-continue-statement
サンプルプログラム
input_value = int(input('数値を入力してください:'))
def break_return(int_value):
for counter1 in range(1, int_value):
print('{}回目の繰り返しです。'.format(counter1))
for counter2 in range(1, int_value):
if counter2 == 2:
continue
else:
pass
print('内側のカウント:{}'.format(counter2))
break_return(input_value)
実行結果
「counter2」が「2」の時の処理が行われていないのが確認できます。
# —–del文—–
リストなどオブジェクトの削除に利用されます。(リストを扱う記事で確認します。)
# —–global文—–
関数の中で宣言した変数を広域変数(グローバル変数)として利用するときに利用されます。(関数の記事で扱います。)
# —–import文—–
モジュールやモジュール内の特定のオブジェクトを呼び出すために利用されます。
# —–nonlocal文—–
global文では変数をグローバル変数として利用しますが、nonlocal文はネストされた関数の中で利用して、ひとつ外側の関数で利用されている変数を参照できるようにするための文です。(関数の記事で扱います。)
# —–pass文—–
if文などで利用されます。構文法的には文が必要にも関わらず、コードとしては何も実行したくない場合に利用されます。
# —–raise文—–
例外を送出するときに利用されます。(例外の記事で扱います。)
# —–return文—–
input_value = int(input('数値を入力してください:'))
def break_return(int_value):
for counter1 in range(1, int_value):
print('{}回目の繰り返しです。'.format(counter1))
for counter2 in range(1, int_value):
print('内側のカウント:{}'.format(counter2))
if counter2 == 3:
return '終了です'
else:
pass
print(break_return(input_value))
実行結果
「break文」の時とは違い「return文」では関数の処理そのものから抜けています。そのため、2回目以降の繰り返しは行われていません。また、「return文」では関数の呼び出し先に値を返すことができます。
# —–yield文—–
ジェネレータイテレータを生成するときに利用されます。ジェネレータイテレータは要素をひとつずつ取り出すことのできるオブジェクトで、イテレータに分類されます。
リストやタプルなどはイテラブルオブジェクトと呼ばれ、それらの要素をひとつずつfor文で取り出す場合はイテレータオブジェクトというイテラブルオブジェクトのコピーのようなもの(iter()メソッド、next()メソッドをもったもの)が生成されています。
ジェネレータ関数(yield文を持つ関数)はこのイテレータオブジェクトの一種であるジェネレータイテレータを作成することのできる関数です。(関数の記事で扱います。)
複合文
複合文のリファレンス
複合文に関するPythonのリファレンスは下のURLから確認できます。
https://docs.python.org/ja/3.11/reference/compound_stmts.html
複合文 (compound statement)
複合文には、他の文 (のグループ) が入ります; 複合文は、中に入っている他の文の実行の制御に何らかのやり方で影響を及ぼします。一般的には、複合文は複数行にまたがって書かれますが、全部の文を一行に連ねた単純な書き方もあります。if 、 while 、および for 文は、伝統的な制御フロー構成を実現します。 try は例外処理および/または一連の文に対するクリーンアップコードを指定します。それに対して、 with 文はコードのかたまりの前後でコードの初期化と終了処理を実行できるようにします。関数とクラス定義もまた、構文的には複合文です。
複合文は、一つ以上の ‘節 (clause)’ からなります。節は、ヘッダと ‘スイート (suite)’ からなります。一つの複合文を成す各節のヘッダは、全て同じインデントレベルに置かれます。各節のヘッダは一意に識別するキーワードで始まり、コロンで終わります。スイートは、節によって制御される文の集まりです。スイートは、ヘッダがある行のコロンの後にセミコロンで区切って置かれた一つ以上の単純文、または、ヘッダに続く行で一つ多くインデントされた文の集まりです。後者の形式のスイートに限り、さらに複合文をネストできます; 以下の文は、 else 節がどちらの if 節に属するかがはっきりしないなどの理由から不正になります:
https://docs.python.org/ja/3.11/reference/compound_stmts.html
上の引用を少し噛み砕くと、次のようになります。
- 複合文は内側に文を持ちます。
- 内側の文の実行には外側の文の処理内容が影響を与えます。
- if 、 while 、および for 文は、条件分岐、繰り返しの基本フローを構成します。
- try は例外処理および/または一連の文に対するクリーンアップコードを指定します。
(クリーンアップコードはファイルを閉じるなどの処理を指します。) - with 文はコードのかたまりの前後でコードの初期化と終了処理を実行できるようにします。(クリーンアップを記載しなくても行ってくれます。)
今回は以上になります。
ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。