你好 StackOverflowers 同胞,
我正在实现一个二叉搜索树,其界面与 Python 中的 a 几乎相同dict
(在有人问之前,我这样做是为了好玩,没有生产代码)。
为了从我的树中添加、检索和删除元素,我实现了__getitem__
,__setitem__
和__delitem__
,效果很好。
问题是,由于这是一个递归数据结构,如果当前节点没有我要查找的键,我的__getitem__
方法本身会调用树的左分支或右分支。__getitem__
__getitem__
通过or进行此递归调用的最“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__
消除了歧义。
请记住,我不是在谈论在外部调用中使用一个或另一个,显然[]
应该在这种情况下使用,但只能在方法内部使用,作为递归调用。
你觉得呢?你有没有什么想法?