python - 循环内可调用变量的限制

标签 python python-3.x while-loop

一个非常简单的例子:

n=1
a=n
x=1
y=a+1
while (y-x) <10:
    n+=1
    print(x,y)
    print(n,a)

这将进入无限循环:

x= 1 y= 2
n= 2 a= 1
x= 1 y= 2
n= 3 a= 1
x= 1 y= 2
n= 4 a= 1
x= 1 y= 2
n= 5 a= 1
x= 1 y= 2
n= 6 a= 1
x= 1 y= 2
n= 7 a= 1

如您所见,n 正在通过循环进行更新,并且可以调用,但是 a 并未更新为更新后的 n值(value)。我想知道这是为什么。如果 y 只是 n+1,情况就是这样。

最佳答案

int 对象(此处为 +=)的操作总是创建一个新的整数对象,它不会改变以前的值。因此,尽管有 a = n 赋值,但对 n 的更改不会反射(reflect)在 a 中。

每次更改 n 的值时,都需要将 a 重新绑定(bind)到 n:

while (y-x) <10:
    n += 1
    a = n

关于python - 循环内可调用变量的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42673411/

相关文章:

python-3.x - 根据条件更改行值的Python for循环工作正常,但不会更改pandas数据帧上的值?

python - 性能:Python 3.x 与 Python 2.x

bash - 我在使用 sed 命令删除行和以下行的 while read 行 bash 脚本时遇到问题

javascript - 计算没有注释的字符

python - 在只读 View (如 HTML 文件)中打开 IPython 笔记本 (*.ipynb)

python - Python 中的 Libtcod 访问冲突错误

python - importlib.reload 不会重新加载以编程方式生成的文件

loops - 理解递归与循环 ruby

python - Kivy - 如何获取 TextInput 的内容

python - Tornado x-www-form-urlencoded 主体无效 : 'latin-1' codec can't encode characters in position 774-777: ordinal not in range(256)