ゼロからのPython入門講座while文による繰り返し 代入文と等号

while文によるループbreak文による中断代入文と等号continue文

ここで、Pythonの 変数 について、もう少し解説したいと思います。

学校の算数では、= という記号を 等号 として習ったと思います。

学校で習う等号の場合、

A = B + 3

という式は恒等式と言って、こう書かれていれば、値 AB + 3 は常に等しい、という意味になります。したがって、B の値が 1 のときは A の値は常に 4 ですし、B100 なら A の値は 103 と自動的に求まります。

しかし、Pythonをはじめとして、多くのプログラミング言語では、= 記号を等号とは違った意味で使います。Pythonの

A = B + 3

という代入文は、

  1. 右辺の式(B+3)の値を計算する
  2. 1.で計算した結果の値に、左辺で指定した名前(A)をつける

という処理を行う文で、恒等式の定義ではありません。

恒等式の場合は、右辺の値が変化すれば自動的に左辺の値も求まりますが、Pythonの代入文では、この処理は代入文を実行したときに一度だけ行われます。ですから、A = B + 3 を実行したときに B の値が 200 なら、A の値は 203 となります。この A の値は、B の値が変化しても変わりません。A という変数は、常に代入文の右辺を計算した時点での値を参照します。

In [8]:
B = 200 # B を 200に設定
A = B + 3 # Aの値を B + 3 = 203 に設定
print(A)
203
In [9]:
B = 300 # B を 300に設定
print(A) # Aの値は 203のまま
203

A の値は、Bの値が変わっても、変化しないことがわかると思います。Aの値を更新するには、もう一度 Aを計算して代入する必要があります。

In [6]:
A = B + 3 # 新しいBの値(=300) で、もう一度 A を代入する
print(A)
303

A は A + 1 と等しい???

プログラムを書いていると、こんな代入式もよく出てきます。

A = 1000
A = A + 1

break文による中断 でも、

counter = counter + 1

という代入文が出てきました。

これも、恒等式と考えるとおかしな式です。A = A + 1 という式は、A + 1A は常に等しい、という意味になってしまいますから、数学的な式としては間違いです。

しかし、これはPythonの代入文としては、なんの問題もありません。A = A + 1 という代入文は、

  1. A + 1 を計算する
  2. 1.の結果である 1001 という値を、A という変数名で参照できるようにする

という処理をおこなっているだけです。やっていることは、

B = A + 1

と書いた場合と大差ありません。

A = A + 1 という代入文を実行すると、そのたびに A の値は 1づつ増加しますので、

A = 1000
A = A + 1
A = A + 1
A = A + 1
A = A + 1

というプログラムを実行すると、A の値は 1004 となります。

Copyright © 2001-2023 python.jp Privacy Policy python_japan
Amazon.co.jpアソシエイト
Amazonで他のPython書籍を検索