📅  最后修改于: 2023-12-03 15:19:08.233000             🧑  作者: Mango
在Python中,名称(也称为标识符)是用于标识变量,函数,类等元素的字母,数字和下划线的组合。 Python使用称为“命名空间”的概念来支持这些名称。
命名空间是用于在程序中标识名称的一种机制。它是一种将名称映射到其定义的对象的方式。可以将命名空间想象成字典对象,其中键是名称,值是名称引用的对象。
Python具有四种类型的命名空间:
在查找名称时,Python按照以下顺序搜索命名空间:
如果变量在一个命名空间中找不到,Python会继续搜索更高级别的命名空间,直到找到为止。
以下是示例代码,说明命名空间如何影响变量查找:
x = 10 # 全局命名空间
def foo():
y = 5 # 局部命名空间
print(x) # 在局部命名空间中找不到‘x’,所以去全局命名空间中查找并输出10。
print(y) # 直接输出5,因为y在局部命名空间中定义。
foo() # 输出:10 5
由于Python具有不同级别的命名空间,因此可以在函数或类定义中使用相同的名称而不会发生命名冲突。例如:
x = 10
class MyClass:
x = 5
def foo(self):
x = 2
print(x) # 输出:2
print(self.x) # 输出:5
print(globals()['x']) # 输出:10,这是全局命名空间中的 'x'值
myobj = MyClass()
myobj.foo()
在此示例中,存在三个不同的"x"变量- 全局变量x,类变量myobj.x和函数变量x。在函数和类方法中使用“self.x”来访问类变量,并使用“globals() ['x']”来访问全局变量。