龙空技术网

3分钟掌握Python 命名空间

自由坦荡的湖泊AI 98

前言:

现时各位老铁们对“xdocument命名空间”大致比较着重,兄弟们都需要剖析一些“xdocument命名空间”的相关知识。那么小编也在网上网罗了一些有关“xdocument命名空间””的相关文章,希望你们能喜欢,朋友们快快来了解一下吧!

在 Python 中,每个变量、函数和对象都在特定的命名空间内定义,并具有特定的作用域。

什么是命名空间?

在 Python 中,命名空间本质上是一个容器,其中包含一组名称或标识符及其相应的对象。把它想象成一个包含文件的目录——命名空间包含名称和对象,目录包含文件。

命名空间的主要目的是为程序中的每个对象提供唯一的名称,以便可以轻松地识别和访问对象。

命名空间的类型:

Python 中有两种类型的命名空间——本地命名空间和全局命名空间。

1.本地命名空间:

每当调用函数时都会创建本地命名空间,它包含该函数中定义的所有名称或标识符。本地命名空间只能在函数内部访问,对其所做的更改不会反映在函数外部。下面是一个由 PythonFlood 编写的本地命名空间的示例:

def my_function ():     x = 10     print (x)     my_function ()

在此示例中,本地命名空间仅包含一个名称 - 'x',其值为 10。调用该函数时,'x' 的值将打印到控制台。一旦函数执行完毕,本地命名空间就会被销毁。

2. 全局命名空间:

全局命名空间是在导入或定义模块时创建的,它包含在函数外部定义的所有名称或标识符。全局命名空间可以在整个程序中访问,并且对全局命名空间中的名称或对象所做的任何更改都会反映在各处。这是全局命名空间的示例:

x = 10 def my_function ():     print ( x )     my_function ()

在此示例中,全局命名空间仅包含一个名称 - 'x',其值为 10。调用该函数时,'x' 的值将打印到控制台。因为“x”是在全局命名空间中定义的,所以它可以被函数访问。函数内对“x”所做的任何更改也会影响函数外部“x”的值。

以通过该函数访问它们。另一方面,成绩存储在本地命名空间中,并且只能在函数内访问。

命名空间和范围解析的规则

当涉及到 Python 中的命名空间和作用域解析时,需要记住一些关键规则:

Python 使用 LEGB(本地、封闭、全局、内置)规则来解析命名空间和作用域。Python 首先在本地命名空间中查找引用的变量,然后在任何封闭的命名空间中查找,然后在全局命名空间中查找,最后在包含 Python 内置函数和模块的内置命名空间中查找引用的变量。如果一个变量是在函数中定义的,那么它被认为是在该函数的本地命名空间中。Python将首先在本地命名空间中查找变量,如果本地没有定义,它将在封闭的命名空间中查找(如果有的话)并继续沿着链向上,直到找到变量或到达全局命名空间。当在函数中定义变量时,默认情况下它被视为位于本地命名空间中。要从函数内修改全局变量,请使用 global 关键字来指示应使用全局变量而不是创建新的局部变量。

下面是一个示例,说明了 PythonFlood 编写的这些规则:

x = 1 def  foo ():     x = 2     print ( "内部 foo:" , x) def  bar ():    global x     x = 3     print ( "内部酒吧:" , x) foo() print ( "外部 foo: " , x) bar() print ( "外部栏:" , x)

在此示例中,定义了一个值为 1 的全局变量 x。然后定义了两个函数 foo 和 bar。foo 在其本地命名空间中创建一个值为 2 的新变量 x 并将其打印出来。bar 使用 global 关键字修改全局变量 x 并将其设置为 3。

当调用 foo 时,它会打印出其本地名称空间中 x 的值(即 2),但是当打印出 foo 外部 x 的值时,我们看到它的值仍然为 1。这是因为 foo创建一个新的局部变量 x 而不是修改全局变量。当调用 bar 时,它会将全局变量 x 的值修改为 3。当在 bar 外部打印出 x 的值时,会看到它已被修改为 3。

命名空间和范围的的建议尽可能避免使用全局变量。全局变量会使代码更难阅读和调试,因为很难跟踪变量的修改位置。使用描述性变量名称来明确每个变量的用途。这有助于防止命名冲突并使您的代码更易于理解。使用函数和类来封装代码,避免命名空间污染。通过将相关代码分组到函数和类中,您可以最大限度地减少全局命名空间中的变量数量,并使代码的推理变得更加容易。避免使用通配符导入(来自模块导入*),因为它们可能会引入命名冲突并使追踪错误变得更加困难。

标签: #xdocument命名空间 #python密封类