文章目录
- 参考
- 描述
- locals() 函数
- 双面间谍:locals()
- 静态 locals()
- 获取最新变化
- 保持同步
- 动态 locals()
参考
项目 | 描述 |
---|---|
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 = 1print(first_locals)# 调用 locals() 以更新与局部命名空间# 相关联的字典。locals()print(first_locals)func()
执行效果
{}
{}
{'first_locals': {...}, 'a': 1}
保持同步
为了时刻获取当前状态下局部命名空间中的内容,你应该总是使用 locals()
函数来获取与局部命名空间相关联的字典,而不是使用 locals()
的赋值结果。对此,请参考如下示例:
def func():print(locals())a = 1print(locals())func()
执行效果
{}
{'a': 1}
动态 locals()
全局作用域下的 locals()
返回的是与全局作用域相关联的命名空间字典,该字典是动态的(这一点与 Python 提供的 globals()
内置函数是相同的)。这意味着,字典中的内容时刻与实际命名空间中的变化保持同步。对此,请参考如下示例:
first_locals = locals()# 判断全局变量 a 是否存在于 first_locals 中
print('a' in first_locals)# 定义全局变量 a
a = 1print('a' in first_locals)
执行效果
False
True