你好,StackOverflowers兄弟
我正在实现一个二进制搜索树,它的接口与Python中的dict
几乎相同(在任何人提出请求之前,我只是为了好玩,没有生产代码)。在
为了在树中添加、检索和删除元素,我实现了__getitem__
、__setitem__
和{
问题是,由于这是一个递归的数据结构,如果当前节点没有我要查找的键,__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
与
^{pr2}$我知道它们的工作原理完全一样,一个是另一个的包装,但这是一个风格问题。在
直接使用[]
可以提供更简洁的代码,更少的冗长,但是可能会误导那些不能立即理解指令基本上是方法的递归调用的人,因此__getitem__
可以消除歧义。在
请记住,我不是说在外部调用中使用一个或另一个,显然在这种情况下,[]
应该被使用,但只能在方法内部使用,作为递归调用。在
你有什么想法?在
我通常使用
[]
,但这并不重要。。。我不知道在这个问题上有什么风格指南。在注意,在父类上调用}。e、 g
__getitem__
时,需要使用__getitem__
而不是{但这不是你要面对的。。。在
请不要使用此代码这不是一个好代码的例子(
return dict.get(self,key,None)
会更好)。这只是一个易于阅读的插图使用
[ ]
方式。它就是这样设计的。如果您唯一关心的是误导代码的其他创建者,您可以通过在代码中添加注释来克服它。在相关问题 更多 >
编程相关推荐