python的内置函数locals()和有意思的小探索
python的内置函数locals()
deepseek输出内容
locals() 的作用
locals() 返回一个字典,表示当前作用域的局部变量(包括变量名和对应的值)。它的核心用途是动态访问或操作当前作用域内的变量。
典型场景示例
def example():
x = 10
y = "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 = 1 locals()["x"] = 100 # 通常无效!因为解释器可能优化了局部变量访问 print(x) # 输出:1(未修改成功) modify_locals()直接修改变量值比操作
locals()字典更可靠。 -
在模块层调用时:
# 在模块层(全局作用域)调用 locals() 等价于 globals() print(locals() is globals()) # 输出:True -
在类或嵌套函数中:
class MyClass: def __init__(self): self.a = 5 print(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 = 42
print(new_var) # 输出:42
调试时查看变量:
locals() 可以快速输出当前作用域的所有变量,便于调试:
def debug_function():
a = 10
b = [1, 2, 3]
print(locals()) # 输出:{'a': 10, 'b': [1, 2, 3]}
总结
locals()是 Python 内置函数,用于获取当前局部作用域的变量字典。- 不要混淆
local(),Python 中没有此函数。 - 主要用途是调试或动态分析代码中的变量,直接修改变量建议使用赋值语句。
有意思的小实验
可以看看这期视频:
小实验

浙公网安备 33010602011771号