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() 的注意事项

  1. 动态修改局部变量(谨慎使用):

    def modify_locals():
        x = 1
        locals()["x"] = 100  # 通常无效!因为解释器可能优化了局部变量访问
        print(x)  # 输出:1(未修改成功)
    
    modify_locals()
    

    直接修改变量值比操作 locals() 字典更可靠。

  2. 在模块层调用时

    # 在模块层(全局作用域)调用 locals() 等价于 globals()
    print(locals() is globals())  # 输出:True
    
  3. 在类或嵌套函数中

    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 中没有此函数。
  • 主要用途是调试或动态分析代码中的变量,直接修改变量建议使用赋值语句。

有意思的小实验

可以看看这期视频:
小实验

posted @ 2025-02-24 01:43  Gold_stein  阅读(184)  评论(0)    收藏  举报