Python使用指定作用域变量

Python使用指定作用域变量教程

在编写程序的过程中,有时候,我们定义的 局部变量 和全局变量会重名,这时候程序是不会报错的。 Python 给开发者提供了三个 函数 来查询指定作用域范围的 变量

Python 获取指定作用域的三个函数分别为:globals()、locals() 和 vars()。

Python作用域函数

函数 描述
globals() 该函数以 字典 的形式,返回全局范围内所有的变量,其中字典的 key 为变量名,字典的 value 为变量的值。
locals() 该函数以字典的形式,返回当前作用域内所有的变量,其中字典的 key 为变量名,字典的 value 为变量的值。
vars() 该函数以字典的形式,返回在指定对象范围内所有的变量。如果不传入 object 参数,vars() 和 locals() 的作用完全相同。

Python globals与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"])

程序运行后,控制台输出如下:

37_python变量作用域.png

首先,我们定义了一个全局变量 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"])

程序运行后,控制台输出如下:

38_python变量作用域.png

首先,我们定义了一个全局变量 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)

程序运行后,控制台输出如下:

39_python变量作用域.png

首先,我们定义了一个全局变量 g_info,接着,我们使用 globals 获取该全局变量,并使用 赋值 语句修改该全局变量的值。

最后,我们在修改该全局变量之前打印该全局变量的值和修改之后,打印该全局变量的值,发现我们可以通过 globals 赋值的方式来修改全局变量的值。

Python使用指定作用域变量总结

Python globals() 函数,该函数以字典的形式,返回全局范围内所有的变量,其中字典的 key 为变量名,字典的 value 为变量的值。

Python locals() 函数,该函数以字典的形式,返回当前作用域内所有的变量,其中字典的 key 为变量名,字典的 value 为变量的值。

Python vars() 函数,该函数以字典的形式,返回在指定对象范围内所有的变量。如果不传入 object 参数,vars() 和 locals() 的作用完全相同。

不管是使用 globals() 还是使用 locals() 获取的全局范围内的变量,都可以被修改,而这种修改会真正改变全局变量本身,但通过 locals() 获取的局部变量,即使对它修改也不会影响局部变量。