你好,StackOverflowers,
我正在实现一个二叉搜索树,其接口(interface)与 Python 中的 dict
几乎相同(在有人问之前,我这样做是为了好玩,没有生产代码)。
为了从我的树中添加、检索和删除元素,我实现了 __getitem__
、__setitem__
和 __delitem__
,效果很好。
问题是,因为这是一个递归数据结构,如果当前节点没有我要找的 key 。
通过 __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__
消除歧义。
请记住,我不是在谈论在外部调用中使用一个或另一个,显然 []
应该在那种情况下使用,但只能在方法内部,作为递归调用。
你有什么想法?
最佳答案
使用[ ]
方式。它被设计成这样。如果您唯一担心的是误导您的代码的其他研究者,您只需在代码中添加注释即可克服它。
关于python - __getitem__ 或方括号用于递归数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12460580/