2

我试图了解 Python 名称绑定到底是什么,以及何时解释此绑定。

在 c 中,

include <stdio.h>
int main()
{
int X = 42;
int* Y[1];
Y[0] = &X;
X = 666;
printf("%d", *Y[0]);
return 0;
}

打印 666。我期待 Python 代码块:

X = 42
L = []
L.append(X) #3
X = 666
print(L) #5

做同样的事情,但事实并非如此。标记为 3 和 5 的行之间究竟发生了什么?#3 是否再次引用称为“42”的对象,例如 X,我们将其称为 X',并将 X' 存储在 L 指向的对象中,即 []?

4

1 回答 1

5

你所说的几乎是发生了什么:

X = 42               # Create new object 42, bind name X to it.
L = []
L.append(X)          # Bind L[0] to the 42 object.
X = 666              # Create new object 666, bind name X to it.
print(L)             # Will not see the 666.

append不是将数组元素绑定到,而是X将其绑定到X 后面的对象,42.

当我第一次意识到这就是 Python 的工作方式时,事情(特别是以前让我感到困惑并引起很多焦虑和咬牙切齿的事情)变得更加清晰。

于 2015-10-14T01:36:48.127 回答