Python 中公共方法和私有方法之间的重构

萨米

我正在查看教程“使用算法和数据结构解决问题”(http://interactivepython.org/runestone/static/pythonds/Trees/SearchTreeImplementation.html中的二进制搜索树部分有几次,他们使用同名的“public”和“private”辅助方法,例如“put”方法:

def put(self,key,val):
    if self.root:
        self._put(key,val,self.root)
    else:
        self.root = TreeNode(key,val)
    self.size = self.size + 1

def _put(self,key,val,currentNode):
    if key < currentNode.key:
        if currentNode.hasLeftChild():
               self._put(key,val,currentNode.leftChild)
        else:
               currentNode.leftChild = TreeNode(key,val,parent=currentNode)
    else:
        if currentNode.hasRightChild():
               self._put(key,val,currentNode.rightChild)
        else:
               currentNode.rightChild = TreeNode(key,val,parent=currentNode)

我也在其他地方看到过这种方法,但我不太了解动机。与将所有内容直接放在一种方法中相比有什么优势,仅仅是为了提高可读性吗?

blue_note

基本原理是该类的用户不应该对“当前节点”一无所知。当前节点仅在递归插入过程中有意义,它不是树的永久属性。用户将树视为一个整体,并且只对其进行插入/查找操作。

也就是说,您可以通过使用默认值currentNode=None并检查它将两种方法合二为一。然而,这两种方法正在做截然不同的事情。put方法只是初始化根,而_put递归插入,所以最好将它们分开。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章