【发布时间】:2018-03-17 17:01:18
【问题描述】:
我正在阅读 Miller 和 Ranum 的关于使用 Python 的算法和数据结构的书。他们使用以下示例:
def squareroot(n):
root = n/2
for k in range(20):
root = (1/2)*(root + n / root)
return root
我的问题是,变量 'root' 在 for 循环中被重新分配,因此每次迭代时,赋值运算符右侧的表达式中的 'root' 的值都会发生变化。我不确定我是否理解这怎么可能。
一旦进行函数调用,for 循环外的“root”变量(在第 2 行)的计算结果为一个值,然后由 for 循环块表达式中的“root”变量引用,允许表达式计算为单个值,该值在for循环块中重新分配给赋值运算符左侧的变量“root”。在下一次迭代开始时,'root' 不再是 n/2,而是 for 循环中的表达式计算的任何值。在这种情况下,变量“root”被重新分配了一个浮点值,因此不再是它最初定义的——一个使用“root”变量的表达式。
例如,如果我们使用函数调用 squareroot(9),'root' 在第一次迭代后将保持 3.25 的值,因为 for 循环中的表达式计算为该值。一旦在 for 循环中为变量 'root' 重新分配了一个浮点值,最初定义为 'root' 的表达式就会被破坏。 'root' 已被重新定义为 3.25。在 for 循环中,'root' 不再指代表达式,而是指单个浮点值。然而,在这个例子中,for 循环中的“root”变量似乎在每次迭代之后都有两个含义:它既是浮点值又是表达式。我不明白这是怎么回事。
【问题讨论】:
-
如你所见,变量“作为浮点值”和“作为表达式”有什么区别?
-
变量从不“引用表达式”。它们指的是评估该表达式的值。因此,例如,在执行
root = n/2的那一刻,root持有一个特定的数值,该数值恰好是当时n持有的数值的一半;与n的值没有持续的联系。
标签: python-3.x function for-loop newtons-method