gpt4 book ai didi

python - 有没有办法让 locals() 和 globals() 像 defaultdict 一样

转载 作者:行者123 更新时间:2023-11-28 21:11:24 25 4
gpt4 key购买 nike

是否可以在运行时更改 Python 中 globallocal 变量的行为?

在 Python 中,locals()给出对当前执行范围内变量的引用,这是一个 dict 对象。

>>> locals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}

是否可以将 locals() 返回的引用替换为 defaultdict , 但在替换之前保留以前的值(locals() 的副本)?

我希望这能在使用未初始化的变量和访问执行范围内的任何变量名时避免 UnboundLocalException 异常(未初始化的变量将采用指定的默认值)。

我试图通过将 locals() 重新分配给 locals 来修改返回值,但没有成功。

同样的问题适用于 globals() .

最佳答案

不,你不能。 locals() 只是用于函数的实际命名空间的反射(reflect)

出于性能原因,实际的命名空间是一个数组,并且局部变量不是按名称而是按索引查找的。事后您不能向其添加新名称,因为编译器根本没有考虑数组中的更多引用。

请注意,NameError 异常会因缺少全局变量 而不是局部变量而抛出。本地名称,如果尚未绑定(bind),则抛出 UnboundLocalException。但是,您也不能用 defaultdict 替换 globals() 字典;模块对象的 __dict__ 属性是只读的。即使它不是只读的,由于在命名空间中查找名称的方式,也只支持内置的 dict 类型;这是by design .

关于python - 有没有办法让 locals() 和 globals() 像 defaultdict 一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35436694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com