作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以在运行时更改 Python 中 global
和 local
变量的行为?
在 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/
我是一名优秀的程序员,十分优秀!