如果我有这样一个函数:
x = 10
def foo():
print(x)
x = 20
print(x)
调用foo首先抛出一个UnboundLocalError
print
。所以看起来符号表是在解析时构造的。但这与类变量的名称解析不一致。
例如:
x = 10
class A:
print(x)
x = 20
print(x)
打印10
和20
。因此类的符号表在其运行时被更新。你知道吗
成员变量也是如此。你知道吗
class A:
x = 10
def foo(self):
print(self.x)
self.x = 20
print(self.x)
a = A()
a.foo()
打印10
和20
。实例的符号表将在运行时再次更新。第一个print(self.x)
不会因为后面有赋值而抛出。你知道吗
这种不一致背后的原因是什么? 为什么函数的符号表不能在运行时更新呢?是否纯粹出于性能原因?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐