私はMiller and RanumのPythonを使ったアルゴリズムとデータ構造に関する本を読んでいます。彼らは、次の例を使用します。Pythonの変数の再割り当て - オントロジクエリ - ニュートンメソッドを使用して
def squareroot(n):
root = n/2
for k in range(20):
root = (1/2)*(root + n/root)
return root
私の質問は、変数「ルートは」のループ内に再割り当てされている
ので、その割り当ての右側の式の中で「ルート」の値が各反復でオペレータの変更。私はこれがどのように可能であるか分かりません。
関数呼び出しが行われると、forループ(2行目)の外側の 'root'変数は評価され、forループの式の 'root'変数によって参照されます式を代入演算子の左にあるfor-loopブロックの変数 'root'に再割り当てされる単一の値に評価することができます。次の反復の開始時に、 'root'はもはやn/2ではなく、forループの式が評価した値に関係なくです。この場合、変数 'root'はfloat値に再割り当てされ、元々は定義されていなかったものです。これは 'root'変数を使用する式です。
たとえば、関数呼び出しsquareroot(9)を使用すると、forループの式がその値に評価されるため、 'root'は最初の反復の後に3.25の値を保持します。 for-loopの変数 'root'がひとつのfloat値に再割り当てされると、もともと 'root'を定義した式は破棄されます。以来、 'root'は3.25として再定義されました。 for-loopの 'root'は、式を参照するのではなく、単一のfloat値を参照します。しかし、この例では、forループの 'root'変数には、各繰り返しの後に2つの意味があります。つまり、float値と式の両方です。私はそれがどのようにできるのか分かりません。
あなたが理解しているように、変数「浮動小数点値」と「式である」との違いは何ですか? – mwchase
変数は決して "式を指します"。その式を評価する*値*を参照します。たとえば、 'root = n/2'が実行されると、' root'は特定の数値を保持します。その数値はその時に 'n'が保持する値の半分になります。 'n'の値との継続的な関係はありません。 – jasonharper