【发布时间】:2017-01-17 16:19:57
【问题描述】:
在现有的 python 脚本中,我使用 vivification 来处理字典。
class AutoVivification(dict):
"""Implementation of perl's autovivification feature."""
def __init__(self, *args, **kwargs):
super(AutoVivification, self).__init__(*args, **kwargs)
self.vivify = True
self.root = self
def __getitem__(self, item):
try:
return dict.__getitem__(self, item)
except KeyError:
if not self.root.vivify:
raise
value = self[item] = type(self)()
value.root = self.root
return value
def unvivify(self):
self.vivify = False
def revivify(self):
self.vivify = True
def upgrade(self):
self.root = self
我想为字典中的每个字典应用这个类。我想到了类似的东西:
def upvivification(dico):
"""Upgrade to the last autovivification version."""
if isinstance(dico, dict):
dico = AutoVivification(dico)
for k in dico:
if isinstance(dico[k], dict):
upvivification(dico[k])
但是,确实它不起作用,因为此更改的范围是函数而不是全局...我不知道如何递归地进行此更改...
【问题讨论】:
-
“此更改的范围在函数中”中的更改是什么?您的意思是更新作为参数传递的
dicodict? -
另外,
upvivification函数是在AutoVivification类内还是在类外? -
是的,它是更新作为参数传递的dico。
-
upvivification 函数在 AutoVivification 类之外
标签: python function dictionary scope