是否可以在运行时更改Python中global
和的行为local
?
在Python中,locals()
提供对当前执行范围(一个dict
对象)中变量的引用。
>>> locals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}
是否可以将返回的引用替换locals()
为defaultdict
,但是locals()
在替换之前保留先前的值(的副本)?
我希望这可以避免UnboundLocalException
在使用未初始化变量并在执行范围内访问任何变量名称时发生异常(未初始化变量将采用指定的默认值)。
我试图通过将值locals()
重新分配给本地人来修改返回的值,但没有成功。
同样的问题globals()
。
不,你不能。locals()
只是函数使用的实际名称空间的反映。
出于性能原因,实际的名称空间是一个数组,并且不按名称而是按索引查找本地。事后,您不能为此添加新名称,因为编译器根本没有考虑数组中的更多引用。
请注意,NameError
缺少全局变量而不是局部变量会引发异常。本地名称(如果尚未绑定)则UnboundLocalException
改为引发。但是,您也不能用globals()
defaultdict替换字典。__dict__
模块对象的属性为只读。即使它不是只读的,dict
由于在名称空间中查找名称的方式也仅支持内置类型。这是设计使然。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句