📜  Python中的命名空间和作用域

📅  最后修改于: 2022-05-13 01:55:43.368000             🧑  作者: Mango

Python中的命名空间和作用域

什么是命名空间:

命名空间是一个系统,它为Python中的每个对象都有一个唯一的名称。对象可能是变量或方法。 Python本身以Python字典的形式维护一个命名空间。让我们看一个例子,计算机中的目录文件系统结构。不用说,可以有多个目录,每个目录中都有一个同名的文件。但是,只要指定文件的绝对路径,就可以将其定向到文件。
实时示例,命名空间的作用就像一个姓氏。一个人可能在课堂上找不到一个“爱丽丝”,可能有多个“爱丽丝”,但是当你特别要求“爱丽丝李”或“爱丽丝克拉克”(有姓氏)时,只会有一个(暂时不要'不要认为多个学生的名字和姓氏都相同)。
在类似的行中, Python解释器会根据命名空间了解 one 试图在代码中指向的确切方法或变量。因此,单词本身的划分提供了更多信息。它的名字(意思是名字,一个唯一的标识符)+空格(它谈论与范围相关的东西)。在这里,名称可能是任何Python方法或变量,而空间取决于尝试访问变量或方法的位置。

命名空间类型:

当Python解释器在没有任何用户定义的模块、方法、类等的情况下单独运行时。总是存在一些函数,如 print()、id(),这些是内置的命名空间。当用户创建模块时,会创建一个全局命名空间,稍后创建本地函数会创建本地命名空间。内置命名空间包含全局命名空间,全局命名空间包含本地命名空间

命名空间的生命周期:

命名空间的生命周期取决于对象的范围,如果对象的范围结束,则该命名空间的生命周期结束。因此,不可能从外部命名空间访问内部命名空间的对象。

例子:

Python3
# var1 is in the global namespace
var1 = 5
def some_func():
 
    # var2 is in the local namespace
    var2 = 6
    def some_inner_func():
 
        # var3 is in the nested local
        # namespace
        var3 = 7


Python3
# Python program processing
# global variable
 
count = 5
def some_method():
    global count
    count = count + 1
    print(count)
some_method()


Python3
# Python program showing
# a scope of object
 
def some_func():
    print("Inside some_func")
    def some_inner_func():
        var = 10
        print("Inside inner function, value of var:",var)
    some_inner_func()
    print("Try printing var from outer function: ",var)
some_func()


如下图所示,同一个对象名称可以存在于多个命名空间中,因为同名对象之间的隔离是由它们的命名空间来维护的。

但在某些情况下,可能只对更新或处理全局变量感兴趣,如下例所示,应将其显式标记为全局和更新或处理。请注意,“count = count +1”行引用了全局变量,因此使用了全局变量,但将其与写为“count = 1”的同一行进行比较。然后根据范围规则,绝对需要“全局计数”这一行。

Python3

# Python program processing
# global variable
 
count = 5
def some_method():
    global count
    count = count + 1
    print(count)
some_method()

输出:

6

Python中的对象范围:

范围是指可以访问特定Python对象的编码区域。因此,不能从代码的任何地方访问任何特定对象,必须在对象的范围内允许访问。
让我们举个例子来详细了解一下:

示例 1:

Python3

# Python program showing
# a scope of object
 
def some_func():
    print("Inside some_func")
    def some_inner_func():
        var = 10
        print("Inside inner function, value of var:",var)
    some_inner_func()
    print("Try printing var from outer function: ",var)
some_func()

输出:

Inside some_func
Inside inner function, value of var: 10

Traceback (most recent call last):
  File "/home/1eb47bb3eac2fa36d6bfe5d349dfcb84.py", line 8, in 
    some_func()
  File "/home/1eb47bb3eac2fa36d6bfe5d349dfcb84.py", line 7, in some_func
    print("Try printing var from outer function: ",var)
NameError: name 'var' is not defined