名称查找,确定作用域,覆盖

xiaoxiao2021-02-28  74

访问一个属性时,解释器必须在三个名称空间中的一个找到他。

首先从局部名称空间开始,如果没有找到,解释器将继续查找全局名称空间。

如果这也失败了,它将在内建空间名称里查找。如果最后的尝试也失败了,将会报NameError。

局部空间名称中找到的名字会隐藏全局或内建名称空间的对应对象。这就相当于覆盖了那个全局变量

def foo(): bar = 299 print("in foo,bar is",bar) bar = 101 print("in main,bar is",bar) foo()

in main,bar is 101 in foo,bar is 299

foo()函数局部名称空间里的bar变量覆盖了全局的bar变量。

虽然bar纯在域全局名称空间里,但程序首先找到的是局部名称空间里的那个,所以覆盖了全局的哪一个。

转载请注明原文地址: https://www.6miu.com/read-37114.html

最新回复(0)