文章目录
参考
项目 | 描述 |
---|---|
Python 官方文档 | https://docs.python.org/zh-cn/3/ |
搜索引擎 | Google 、Bing |
描述
项目 | 描述 |
---|---|
PyCharm | 2023.1 (Professional Edition) |
Python | 3.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