我正在读这本书' Beginning Python'。其中提到:
通常,您不应该修改vars返回的字典,因为根据官方Python文档,结果是未定义的。换句话说,你可能得不到你想要的结果。
我在这里很困惑。
当vars()
获取指定对象的__dict__
时。
并且该范围中的所有变量都基于__dict__
。怎么可能在修改时被称为undefined
?
e.g。我这样做了:
>>> x = 0
>>> vars()['x'] += 2
>>> x
>>> 2
不知道这个x在该范围内保持2的值,直到有人改变了x的值?
那么,result is undefined
在这里意味着什么?
答案 0 :(得分:1)
如果没有参数,
vars()
就像locals()
一样。
切换到locals
,然后:
注意:不应修改此词典的内容;更改可能不会影响解释器使用的本地和自由变量的值。
请注意"可能不会" ; undefined意味着,对于应该发生的事情没有确切的定义。换句话说,它不能保证,你不应该编写依赖它的代码(无论哪种方式)。
答案 1 :(得分:0)
也许documentation确实回答了您的问题:
模块和实例等对象具有可更新的__dict__属性;但是,其他对象可能对其__dict__属性有写限制(例如,类使用dictproxy来阻止直接字典更新)。