Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 局部变量、类变量和实例变量的名称解析不一致_Python_Variables_Scoping - Fatal编程技术网

Python 局部变量、类变量和实例变量的名称解析不一致

Python 局部变量、类变量和实例变量的名称解析不一致,python,variables,scoping,Python,Variables,Scoping,如果我有这样一个函数: x = 10 def foo(): print(x) x = 20 print(x) 调用foo首先抛出一个UnboundLocalErrorprint。因此,看起来符号表是在解析时构造的。但这与类变量的名称解析不一致。 例如: x = 10 class A: print(x) x = 20 print(x) 打印10和20。因此,类的符号表在其运行时更新 成员变量也是如此 class A: x = 10

如果我有这样一个函数:

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)
不会因为后面有一个赋值而抛出

这种不一致背后的理由是什么?
为什么函数的符号表不在运行时更新?这纯粹是出于性能原因吗

相关。也许有重复的地方?第三个例子与其他两个无关。在这里,您只需要拥有一个class属性,该属性随后会被实例属性遮蔽。