Python locals() 函数

Python locals() 语法

locals() 是 Python 的一个内置函数,它会以字典的方式来返回当前程序的所有局部变量。

语法:

locals()

说明:

locals() 函数不接收任何参数。

对于 locals() 函数,小伙伴们要清楚以下 2 点。

  • 在函数内部,locals() 返回的是该函数的局部变量字典。
  • 在模块级别(即不在任何函数内部),locals() 返回的是与 globals() 相同的结果,即当前模块的全局命名空间字典。

提示: locals() 函数返回的是当前程序所有 “局部变量”,而 globals() 函数返回的是当前程序所有 “全局变量”。

Python locals() 摘要

使用频率
官方文档 查看

Python locals() 示例

接下来,我们通过一个简单的例子来讲解一下 Python locals() 函数是如何使用的。

示例 1:locals() 基本用法

a = 10
b = 20
# 定义函数
def foo():
    c = 30
    d = 40
    print(locals())

# 调用函数
foo()

运行结果如下。

{'c': 30, 'd': 40}

分析:

变量 a 和 b 是全局变量,而变量 c 和 d 是局部变量。而 locals() 只会返回所有局部变量。

注意: 在函数内部,locals() 返回该函数的局部变量。而在模块级别上,locals() 返回全局变量。

globals()、locals() 和 vars()

与 Python 命名空间相关的内置函数有 3 个:globals()、locals()、vars(),它们之间的区别如下。

  • globals():返回当前命名空间的全局变量。
  • locals():返回当前命名空间的局部变量。
  • vars():不带参数时等价于 locals(),带参数时等价于 object.__dict__()。

示例 2:globals() vs locals() vs vars()

a = 10
b = 20
# 定义函数
def foo():
    c = 30
    d = 40
    print(globals())
    print(locals())
    print(vars())

# 调用函数
foo()

运行结果如下。

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000027F748EBEF0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'test.py', '__cached__': None, 'a': 10, 'b': 20, 'foo': <function foo at 0x0000027F748A8A40>}
{'c': 30, 'd': 40}
{'c': 30, 'd': 40}

常见问题

1. 可以通过修改 locals() 返回的字典来改变局部变量的值吗?

不能。这是一个非常容易踩坑的地方!虽然修改 globals() 字典可以改变全局变量,但在函数内部,修改 locals() 返回的字典是无效的。因为 Python 对局部变量做了底层优化,locals() 只是局部变量表的一个拷贝或视图。

def test_locals():
    x = 10
    locals()['x'] = 20  # 尝试修改局部变量
    print(x)            # 输出仍然是 10
test_locals()

上一篇: globals()

下一篇: vars()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号