我在 Python 中编写递归成员函数时遇到问题。我无法将函数参数的默认值初始化为与成员变量相同的值。我猜 Python 不支持该功能,因为它说在我尝试分配参数时未定义 self 。虽然我可以围绕它编写代码,但 Python 中缺少函数重载会导致我尝试一种明显的解决方案。
例如,尝试递归打印一个链表,我的显示函数得到以下代码;
def display(self,head = -1):
if head == -1:
head = self.head
if not head:
return
print head,
self.display(head.link)
虽然这段代码有效,但它很丑陋。主函数如下所示:
def main():
l = List();
l.insert(3);
l.insert(40);
l.insert(43);
l.insert(45);
l.insert(65);
l.insert(76);
l.display()
if __name__ == "__main__":
main()
如果我可以将显示函数参数设置为默认为 self.head 如果它在没有参数的情况下调用,那么它看起来会更好。我最初尝试创建该函数的两个版本,一个带有两个参数,一个带有一个,但正如我所说,Python 不支持重载。我可以传入一个参数列表并检查参数的数量,但这也很丑陋(它会使它看起来像 Perl!)。问题是,如果我将 head = self.head 这行放在函数体内,它会在每次递归调用期间被调用,这绝对不是我需要的行为。None 也是 head 变量的有效值,因此我不能将其作为默认值传递。我使用 -1 基本上知道我在初始函数调用而不是递归调用。我意识到我可以写两个函数,一个驱动另一个,但我宁愿将它全部包含在一个递归函数中。我很确定我在这里遗漏了一些基本的pythonic原则,有人可以帮助我解决问题的pythonic方法吗?
谢谢!