python的内置函数locals()
deepseek输出内容
locals()
的作用
locals()
返回一个字典,表示当前作用域的局部变量(包括变量名和对应的值)。它的核心用途是动态访问或操作当前作用域内的变量。
典型场景示例
def example():x = 10y = "hello"# 返回当前函数内的局部变量字典print(locals()) # 输出:{'x': 10, 'y': 'hello'}example()
locals()
与 globals()
的区别
函数 | 作用域 | 返回内容 |
---|---|---|
locals() |
当前局部作用域(如函数内) | 局部变量的字典(在模块层调用时与 globals() 相同) |
globals() |
全局作用域(模块层) | 全局变量的字典 |
示例对比
global_var = "global"def test():local_var = "local"print("局部作用域:", locals()) # {'local_var': 'local'}print("全局作用域:", globals()) # 包含 'global_var' 和其他全局变量test()
locals()
的注意事项
-
动态修改局部变量(谨慎使用):
def modify_locals():x = 1locals()["x"] = 100 # 通常无效!因为解释器可能优化了局部变量访问print(x) # 输出:1(未修改成功)modify_locals()
直接修改变量值比操作
locals()
字典更可靠。 -
在模块层调用时:
# 在模块层(全局作用域)调用 locals() 等价于 globals() print(locals() is globals()) # 输出:True
-
在类或嵌套函数中:
class MyClass:def __init__(self):self.a = 5print(locals()) # 输出构造函数的局部变量(包括 self)obj = MyClass() # 输出:{'self': <MyClass object at ...>, 'a': 5}
常见误用与替代方案
误以为 locals()
能直接创建变量:
def create_var():locals()["new_var"] = 42 # 不会实际创建变量!print(new_var) # 报错:NameError# 正确方式:直接赋值
def correct_create_var():new_var = 42print(new_var) # 输出:42
调试时查看变量:
locals()
可以快速输出当前作用域的所有变量,便于调试:
def debug_function():a = 10b = [1, 2, 3]print(locals()) # 输出:{'a': 10, 'b': [1, 2, 3]}
总结
locals()
是 Python 内置函数,用于获取当前局部作用域的变量字典。- 不要混淆
local()
,Python 中没有此函数。 - 主要用途是调试或动态分析代码中的变量,直接修改变量建议使用赋值语句。
有意思的小实验
可以看看这期视频:
小实验