为什么直接修改__dict__会返回未定义的结果?

时间:2014-10-10 08:07:19

标签: python

我正在读这本书' Beginning Python'。其中提到:

  

通常,您不应该修改vars返回的字典,因为根据官方Python文档,结果是未定义的。换句话说,你可能得不到你想要的结果。

我在这里很困惑。

vars()获取指定对象的__dict__时。 并且该范围中的所有变量都基于__dict__。怎么可能在修改时被称为undefined

e.g。我这样做了:

>>> x = 0
>>> vars()['x'] += 2
>>> x
>>> 2

不知道这个x在该范围内保持2的值,直到有人改变了x的值?

那么,result is undefined在这里意味着什么?

2 个答案:

答案 0 :(得分:1)

作为the documentation states

  

如果没有参数,vars()就像locals()一样。

切换到locals,然后:

  

注意:不应修改此词典的内容;更改可能不会影响解释器使用的本地和自由变量的值。

请注意"可能不会" ; undefined意味着,对于应该发生的事情没有确切的定义。换句话说,它不能保证,你不应该编写依赖它的代码(无论哪种方式)。

答案 1 :(得分:0)

也许documentation确实回答了您的问题:

  

模块和实例等对象具有可更新的__dict__属性;但是,其他对象可能对其__dict__属性有写限制(例如,类使用dictproxy来阻止直接字典更新)。