gpt4 book ai didi

python - __getitem__ 或方括号用于递归数据结构

转载 作者:太空宇宙 更新时间:2023-11-03 15:22:43 31 4
gpt4 key购买 nike

你好,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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com