0
点赞
收藏
分享

微信扫一扫

深入解析Linux C/C++ 编程中的内存泄漏问题

文章目录

参考

项目描述
Python 官方文档https://docs.python.org/zh-cn/3/
搜索引擎Google 、Bing

描述

项目描述
PyCharm2023.1 (Professional Edition)
Python3.10.6

locals() 函数

在 Python 中,locals() 是一个 内置函数,用于返回 当前作用域的命名空间的字典,该字典存储了当前作用域中定义的所有全局变量和函数。
locals() 函数返回一个字典,其中包含局部作用域中的变量名及其对应的值。这个字典可以用于 访问、修改和删除 当前作用域中的变量。

对此,请参考如下示例:

# 当在全局作用域中调用 locals() 函数时,
# 该函数将返回全局命名空间字典,与 globals()
# 返回的值相同。
print(locals() == globals())


def func():
    # 当在函数中调用 locals() 函数时,
    # 该函数将返回其所在函数的局部命名空间字典。
    local_var = 'Hello World'
    print(locals())


func()

执行效果

True
{'local_var': 'Hello World'}

双面间谍:locals()

静态 locals()

局部作用域下的 locals() 返回的是与局部作用域相关联的命名空间字典,该字典是静态的。这意味着,字典中的内容并不与实际命名空间中的变化保持同步。对此,请参考如下示例:

def func():
    first_locals = locals()
    # 此时局部命名空间中已注册 first_locals 变量
    # 但该变量并不会体现在 first_locals 中
    print(first_locals)
    a = 1
    # 此时局部命名空间中已注册 a 变量
    # 但该变量并不会体现在 first_locals 中
    print(first_locals)


func()

执行效果

{}
{}
获取最新变化

在 Python 中,你可以通过在局部作用域中调用 locals() 来更新与局部命名空间相关联的字典,使其内容与局部命名空间中的内容保持一致。对此,请参考如下示例:

def func():
    first_locals = locals()
    print(first_locals)
    a = 1
    print(first_locals)

    # 调用 locals() 以更新与局部命名空间
    # 相关联的字典。
    locals()

    print(first_locals)


func()

执行效果

{}
{}
{'first_locals': {...}, 'a': 1}
保持同步

为了时刻获取当前状态下局部命名空间中的内容,你应该总是使用 locals() 函数来获取与局部命名空间相关联的字典,而不是使用 locals() 的赋值结果。对此,请参考如下示例:

def func():
    print(locals())
    a = 1
    print(locals())


func()

执行效果

{}
{'a': 1}

动态 locals()

全局作用域下的 locals() 返回的是与全局作用域相关联的命名空间字典,该字典是动态的(这一点与 Python 提供的 globals() 内置函数是相同的)。这意味着,字典中的内容时刻与实际命名空间中的变化保持同步。对此,请参考如下示例:

first_locals = locals()

# 判断全局变量 a 是否存在于 first_locals 中
print('a' in first_locals)

# 定义全局变量 a
a = 1

print('a' in first_locals)

执行效果

False
True
举报

相关推荐

0 条评论