python 数据结构 树 get item_递归数据结构的__getitem__或方括号

这篇博客讨论了在实现BinarySearchTree时,如何在内部方法中优雅地进行递归调用。作者比较了两种实现`__getitem__`的方法,一种直接使用`[]`,另一种使用`__getitem__`自身进行递归。虽然两者功能相同,但作者提出了风格和可读性的考虑,引发了对于Pythonic代码风格的讨论。
摘要由CSDN通过智能技术生成

你好,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__消除了歧义.

请记住,我不是在外部调用中使用一个或另一个,显然,在这种情况下应使用[],而只能在方法内部使用,作为递归调用.

你怎么看?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值