Python 中内置命名空间和全局命名空间有什么区别

Python 中内置命名空间和全局命名空间有什么区别

Python 中,命名空间用于组织和管理代码中的名称(例如变量、函数等)。Python 中有几个命名空间,包括内置命名空间、全局命名空间和本地命名空间。在这里,我们将重点介绍内置命名空间和全局命名空间之间的区别。

内置命名空间:

Python 中的内置命名空间包含内置到语言中并可供所有 Python 代码默认使用的名称。其中包括像 print()、len()、str() 等名称。

示例

# 使用内置函数
print(len("Hello, world!"))

输出

13

全局命名空间:

Python 中的全局命名空间包含在任何函数或类之外定义的名称。这些名称在整个代码中都可用,但它们不是内置到语言中的名称。

示例

# 定义全局变量
my_var = 42

def my_func():
    print(my_var)

my_func()  

输出

42

从全局命名空间访问内置名称:

当您在代码中使用内置名称时,Python 首先在本地命名空间中查找该名称,然后在全局命名空间中查找该名称,最后在内置命名空间中查找该名称。

示例

# 覆盖内置名称
len = 42

# 这将引发 TypeError
print(len("Hello, world!"))

输出

Traceback (most recent call last):
  File "/home/cg/root/44618/main.py", line 5, in 
    print(len("Hello, world!"))
TypeError: 'int' object is not callable

从函数中访问全局名称:

在 Python 中定义函数时,它会为该函数创建一个新的本地命名空间。在函数内部定义的名称仅在该本地命名空间中可用,除非它们被明确标记为全局变量。

示例

# 在函数中使用全局变量
my_var = 42
def my_func():
    global my_var
    return my_var
    # function code using the global variable
print(my_func()) 

输出

42

在 Python 中,有几个命名空间用于存储和管理变量和函数。两个最重要的命名空间是内置命名空间和全局命名空间。以下是这两个命名空间之间差异的一些示例:

访问内置函数:

示例

# 使用内置的 `print` 函数
print("Hello, world!")

# 从内置命名空间中访问 `print` 函数
__builtins__.print("Hello, world!")

输出

Hello world!
Hello world!

第一个示例直接使用 print 函数,该函数是内置命名空间的一部分。第二个示例使用 builtins 命名空间访问相同的 print 函数。

访问内置变量:

示例

# 使用内置的 `True` 变量
if True:
    print("This will be printed")

# 从内置命名空间中访问 `True` 变量
if __builtins__.True:
    print("This will also be printed")

输出

This will be printed
This also will be printed

第一个示例直接使用 True 变量,该变量是内置命名空间的一部分。第二个示例使用 builtins 命名空间访问相同的 True 变量。

定义全局变量:

示例

# 定义全局变量
x = 10
# 访问全局变量
def foo():
    print(x)
foo() 

输出

10

x 变量在全局命名空间中定义,可以从 foo 函数中访问。

定义本地变量:

示例

# 定义本地变量
def foo():
    x = 10
    print(x)

foo()  

输出

10

x 变量被定义为 foo 函数内的一个本地变量,除了函数外不可访问。

修改全局变量:

示例

# 修改全局变量
x = 10
def foo():
    global x
    x = 20
foo()
print(x)  

输出

20

在 foo 函数中使用 global 关键字来修改全局命名空间中的 x 变量。

总之,理解 Python 中内置和全局命名空间之间的差异对于管理和组织代码非常重要。通过使用上面的示例,您可以自定义命名空间以满足特定需求,并确保您的 Python 代码是有组织且易于维护的。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python 教程