我正在阅读David Beazley & Brian K. Jones 's book "Python Cookbook" (Ed 3)。在第35页,有一个ChainMap
的例子。我不太明白values
跳来跳去,请看下面的理解和问题:
>>> values = ChainMap()
>>> values['x'] = 1
我想现在values
是ChainMap({'x': 1})
>>> # Add a new mapping
>>> values = values.new_child()
>>> values['x'] = 2
在这3行的末尾,现在values
是什么?里面是ChainMap
还是字典?
我真的有点失落,这里的代码对我来说是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
字典`链接了什么?
答案 0 :(得分:2)
这是一本很棒的书,我想每个Python开发人员都应该阅读至少第1章和第4章</ p>
关于你的问题:
在这3行结束时,现在的价值观是什么?
值为ChainMap
对象,其中包含2个字典:
values = ChainMap({'x': 1}, {'x': 2})
令人困惑的是,(变异的)对象本身是从new_child()
而不是真正的孩子返回的。
但是现在值'再次开始调用new_child()!
当然,您可以根据需要多次拨打new_child()
,values
始终为ChainMap
对象,其定义方法为new_child()