Python 中的 Globals() 函数
在 Python 中,每个程序都有一个符号表,其中包含程序中定义的名称(变量、函数和类)的信息。globals() 函数允许我们访问和操作全局符号表,提供有关程序中当前全局变量的有价值信息。在本文中,我们将了解这些 globals() 函数是如何工作的以及我们可以在 Python 中使用此函数做什么。
globals() 函数概述
在 Python 中,每个程序都有一个符号表,其中包含程序中定义的名称(变量、函数、类等)的信息。符号表由字典表示,其中名称是键,关联的值表示其当前值或引用。
globals() 函数返回一个字典,表示当前的全局符号表。它提供了对当前作用域中所有全局变量及其对应值的访问权限。通过检查此字典,我们可以以编程方式检索、修改或删除全局变量。
语法
globals()
在这里,globals() 函数不接受任何参数,它只是返回表示全局符号表的字典。
检索全局变量
可以使用 globals() 函数在 Python 中检索全局变量,该函数返回一个表示当前全局符号表的字典。通过访问此字典并遍历其项,您可以检索当前作用域中所有全局变量的名称和值。
示例
在下面的示例中,我们定义了三个全局变量:x、y 和 z。我们还定义了一个函数 print_globals(),该函数调用 globals() 函数来检索全局符号表。通过遍历结果字典的项,我们打印所有全局变量的名称和值。此外,我们可以看到函数 print_globals() 本身也存在于全局符号表中。
x = 10 y = 5 z = "Hello, World!" def print_globals(): global_vars = globals() for name, value in global_vars.items(): print(f"{name}: {value}") print_globals()
输出
__name__: __main__ __doc__: None __package__: None __loader__: <_frozen_importlib_external.SourceFileLoader object at 0x7f9b30a74a30> __spec__: None __annotations__: {} __builtins__: <module 'builtins' (built-in)> __file__: /home/cg/root/22219/main.py __cached__: None x: 10 y: 5 z: Hello, World! print_globals: <function print_globals at 0x7f9b30c13d90>
修改全局变量
globals() 函数不仅允许我们检索全局变量,还允许我们修改其值。
示例
在下面的示例中,我们定义了一个全局变量 x,其初始值为 10。modify_global() 函数使用 globals() 检索全局符号表,并通过直接更新字典条目将 x 的值修改为 20。当我们在调用 modify_global() 函数之前和之后打印 x 的值时,我们可以看到修改生效了。
x = 10 def modify_global(): global_vars = globals() global_vars['x'] = 20 print("Before modification:", x) modify_global() print("After modification:", x)
输出
Before modification: 10 After modification: 20
添加新的全局变量
我们还可以使用 globals() 函数动态添加新的全局变量。让我们看一个演示相同的示例。
示例
在下面的示例中,我们定义了一个函数 add_global(),该函数使用 globals() 将一个名为 new_var 的新全局变量添加到全局符号表中。调用该函数后,我们打印 new_var 的值,这确认该变量已成功添加并且可以在全局范围内访问。
def add_global(): global_vars = globals() global_vars['new_var'] = "I'm a new global variable!" add_global() print(new_var)
输出
I'm a new global variable!
结论
在本文中,我们讨论了什么是 globals() 函数以及为什么使用它。globals() 函数用于访问和操作程序中的全局变量。通过使用此函数,我们可以动态检索、修改或添加全局变量。通过使用 globals() 函数的功能,您可以更好地控制程序的全局变量,从而提高您的 Python 编程技能。