我正在阅读David Beazley & Brian K. Jones 's book "Python Cookbook" (Ed 3)。第35页有一个ChainMap的示例。我不太了解values的上下跳跃,请在下面查看我的理解和问题:

>>> values = ChainMap()
>>> values['x'] = 1


我想现在valuesChainMap({'x': 1})

>>> # Add a new mapping
>>> values = values.new_child()
>>> values['x'] = 2


在这3行的结尾,什么是valuesChainMap还是里面的字典?

我真的有点迷路,这里的代码对我来说是ChainMap添加了一个新的孩子,它应该是一本新的字典;因此values成为由ChainMap链接的词典项;然后values被分配给新字典。

>>> # Add a new mapping
>>> values = values.new_child()
>>> values['x'] = 3


但是现在它链接的values' start to call new_child()again! Isnt' new_child()can only be called by a ChainMap , not a particular dictionary`吗?

最佳答案

这是一本很棒的书,我想每个Python开发人员都应该至少阅读第1章和第4章

关于您的问题:


  在这3行的末尾,现在的值是多少?


值是ChainMap对象,其中映射了2个字典:

values = ChainMap({'x': 1}, {'x': 2})


令人困惑的是,(变异的)对象本身是从new_child()返回的,而不是真正的子对象。


  但是现在值再次开始调用new_child()!


当然,您可以根据需要多次调用new_child()values始终是具有定义方法ChainMapnew_child()对象。

关于python - ChainMap.new_child()返回什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27998953/

10-09 06:19