你好,StackOverflowers,
我实现的Binary Search Tree具有与Python中的dict几乎相同的接口(在有人问之前,我这样做是出于乐趣,没有生产代码).
为了从树中添加,检索和删除元素,我实现了__getitem__,__setitem__和__delitem__,效果很好.
问题是,由于这是递归数据结构,如果当前节点没有我要查找的键,我的__getitem__方法本身会在树的左或右分支上调用__getitem__.
通过__getitem__或[]进行递归调用的最“ pythonic”方法是什么?
例:
def __getitem__(self, key):
if key == self.key:
return self.value
if key < self.key and self.left is not None:
return self.left[key]
if key > self.key and self.right is not None:
return self.right[key]
return None
与
def __getitem__(self, key):
if key == self.key:
return self.value
if key < self.key and self.left is not None:
return self.left.__getitem__(key)
if key > self.key and self.right is not None:
return self.right.__getitem__(key)
return None
我知道它们的工作原理完全相同,一个是另一个的包装,但这是样式问题.
直接使用[]提供了更简洁的代码,减少了冗长性,但是可能误导那些不立即了解该指令基本上是该方法的递归调用的人,因此__getitem__消除了歧义.
请记住,我不是在外部调用中使用一个或另一个,显然,在这种情况下应使用[],而只能在方法内部使用,作为递归调用.
你怎么看?