赞
赏
在编写程序的过程中,有时候,我们定义的 局部变量 和全局变量会重名,这时候程序是不会报错的。 Python 给开发者提供了三个 函数 来查询指定作用域范围的 变量。
Python 获取指定作用域的三个函数分别为:globals()、locals() 和 vars()。
函数 | 描述 |
---|---|
globals() | 该函数以 字典 的形式,返回全局范围内所有的变量,其中字典的 key 为变量名,字典的 value 为变量的值。 |
locals() | 该函数以字典的形式,返回当前作用域内所有的变量,其中字典的 key 为变量名,字典的 value 为变量的值。 |
vars() | 该函数以字典的形式,返回在指定对象范围内所有的变量。如果不传入 object 参数,vars() 和 locals() 的作用完全相同。 |
locals() 函数总是以字典的形式返回当前作用域内所有的变量,因此,如果在全局作用域调用 locals() 函数,那么获取的就是全局作用域的所有变量,如果在局部作用域调用 locals() 函数,那么返回的就是局部作用域的所有变量。
globals() 函数无论在哪里执行,总是获取的是全局作用域里的所有变量。
一般来说,使用 locals() 和 globals() 获取的字典形式的变量只应该被访问,不应该被修改。但实际上,不管是使用 globals() 还是使用 locals() 获取的全局范围内的变量,都可以被修改,而这种修改会真正改变全局变量本身,但通过 locals() 获取的局部变量,即使对它修改也不会影响局部变量。
使用 globals() 函数,获取全局作用域所有变量
print("嗨客网(www.haicoder.net)")
g_info = "HaiCoder"
# 使用 globals() 函数,获取全局作用域所有变量
def print_info():
g_vars = globals()
print("g_vars =", g_vars["g_info"])
vars = globals()
print_info()
print("vars =", vars["g_info"])
程序运行后,控制台输出如下:
首先,我们定义了一个全局变量 g_info,接着,我们分别在函数内部使用 globals 函数获取所有的全局变量,和在函数外部使用 globals 函数获取所有的全局变量。
最后,我们再访问字典中 g_info 的字典的值,我们发现,不管是在全局作用域还是在局部作用域,我们都可以使用 globals 函数获取到所有的全局变量。
即,globals() 函数无论在哪里执行,总是获取的是全局作用域里的所有变量。
使用 locals() 函数,获取当前作用域所有变量
print("嗨客网(www.haicoder.net)")
g_info = "HaiCoder"
# 使用 locals() 函数,获取当前作用域所有变量
def print_info():
g_info = "haicoder"
g_vars = locals()
print("g_vars =", g_vars["g_info"])
vars = locals()
print_info()
print("vars =", vars["g_info"])
程序运行后,控制台输出如下:
首先,我们定义了一个全局变量 g_info 和一个局部变量 g_info,接着,我们分别在函数内部使用 locals 函数获取所有的局部变量,和在函数外部使用 locals 函数获取所有的全局变量。
最后,我们再访问字典中 g_info 的字典的值,我们发现,当在局部作用域时,locals 函数获取的是局部变量的值,当在全局作用域时,locals 函数获取的是全局变量的值。
即,locals() 函数总是以字典的形式返回当前作用域内所有的变量。
使用 globals() 函数,修改全局变量值
print("嗨客网(www.haicoder.net)")
g_info = "HaiCoder"
# 使用 locals() 函数,修改全局变量值
vars = globals()
print("g_info =", g_info)
vars["g_info"] = "haicoder"
print("g_info =", g_info)
程序运行后,控制台输出如下:
首先,我们定义了一个全局变量 g_info,接着,我们使用 globals 获取该全局变量,并使用 赋值 语句修改该全局变量的值。
最后,我们在修改该全局变量之前打印该全局变量的值和修改之后,打印该全局变量的值,发现我们可以通过 globals 赋值的方式来修改全局变量的值。
Python globals() 函数,该函数以字典的形式,返回全局范围内所有的变量,其中字典的 key 为变量名,字典的 value 为变量的值。
Python locals() 函数,该函数以字典的形式,返回当前作用域内所有的变量,其中字典的 key 为变量名,字典的 value 为变量的值。
Python vars() 函数,该函数以字典的形式,返回在指定对象范围内所有的变量。如果不传入 object 参数,vars() 和 locals() 的作用完全相同。
不管是使用 globals() 还是使用 locals() 获取的全局范围内的变量,都可以被修改,而这种修改会真正改变全局变量本身,但通过 locals() 获取的局部变量,即使对它修改也不会影响局部变量。