【发布时间】:2016-07-26 11:54:51
【问题描述】:
我是 python 新手,在处理不可变字符串时遇到了问题。我的问题如下:
我有一棵树,其中每个节点都是一个字典,每个节点都有可变数量的子节点。我希望在这棵树上执行多个操作,因此递归遍历它。
设置是我有一个类,它使用以下函数遍历树:
def __recursiveDive(self, node, enterFunc, leaveFunc, parentNode):
if self.__break:
return
if not self.__skipNode:
enterFunc(node, parentNode, self)
if isinstance(node, dict):
for key, value in node.items():
self.__recursiveDive(value, enterFunc, leaveFunc, node)
elif isinstance(node, list):
for child in node:
if isinstance(child, dict):
self.__recursiveDive(child, enterFunc, leaveFunc, node)
leaveFunc(node, parentNode, self)
else:
self.__skipNode = False
enterFunc 和 leaveFunc 在外部定义并在树/节点上执行所需的工作。
我的问题是,由于 python 字符串是不可变的,我觉得我无法修改树中的任何字符串字段。 enterFunc 是属于另一个类的函数,传递给该类如下:
def enter(self, node, parentNode, traverser):
if isinstance(node, str):
search = re.search(self.regexPattern, node)
if search:
node = node.replace(search.group(2),self.modifyString(search.group(2)))
此处对节点的更改仅是本地的。让输入和离开函数返回节点是我唯一的解决方案吗?
解决此问题的正确/pythonic 方法是什么?
对于那些想要 TL;DR 解决方案的人
确保您的模式返回已完成工作的变量。
【问题讨论】:
标签: python string design-patterns recursion immutability