一个模块拥有一个字典来跟踪它的上下文,例如在执行的某个点定义的名称。这本词典可以通过vars(module)
访问。 (或 module.__dict__
)如果 module
被导入,或通过调用 locals
模块本身的内置函数:
Update and return a dictionary representing the current local symbol table.
但是当我尝试从一个函数访问本地字典时,我发现自己有点困惑。仅包含以下内容的脚本的输出是一个空字典:
def list_locals():
print(locals())
list_locals()
但另一方面,如果脚本仅包含以下内容,则输出是预期的字典,包含 __name__
、__doc__
和其他模块级变量:
print(locals())
那么,locals字典的内容是什么时候设置的呢?
另外,locals
函数定义中的“update”是什么意思?
最佳答案
模块的命名空间是全局 命名空间,通过globals()
访问。 .没有单独的 locals 命名空间,因此 locals()
在函数之外仅返回全局命名空间。
只有函数才有本地命名空间。请注意,locals()
是该命名空间的一种单向反射(reflect);函数的 CPython 实现是高度优化的,您不能通过 locals()
字典添加或更改局部变量。每当命名空间在对该函数的调用之间发生变化时,locals()
返回的字典就会更新。
另请注意,列表/字典/集合理解、生成器表达式和类主体等内容实际上也作为函数执行,尽管具有不同的命名空间规则。在这种情况下,locals()
也将返回单独的函数本地命名空间。
关于python - locals 字典是什么时候设置的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46095903/