python - 将自身数据传递给递归函数

标签 python recursion self

我正在尝试设置一个函数来执行类似的操作

   def __binaryTreeInsert(self, toInsert, currentNode=getRoot(), parentNode=None):

当前节点作为根开始,然后我们在方法中将其更改为不同的节点并再次递归调用它。

但是,我无法让“currentNode=getRoot()”工作。如果我尝试调用函数 getRoot() (如上所述),它会说我没有给它所有必需的变量,但如果我尝试调用 self.getRoot() ,它会提示 self 是一个 undefined variable 。有没有一种方法可以在调用此方法时无需指定根来执行此操作?

编辑:此方法的基本情况已经

if currentNode == None:

所以用它来设置根目录是行不通的

最佳答案

同时arg=None是非提供参数的惯用 Python 哨兵值,它必须None 。例如,在 Lua 中,惯用的非提供参数是一个空表。我们实际上可以将其应用到本例中:

class Foo:
    sentinel = {}
    def bar(self, arg=sentinel):
        if arg is self.sentinel:
            print "You didn't supply an argument!"
        else:
            print "The argument was", arg

f = Foo()
f.bar(123)
f.bar()
f.bar(None)
f.bar({})

输出:

The argument was 123
You didn't supply an argument!
The argument was None
The argument was {}

这适用于除显式传递 Foo.sentinel 之外的任何情况。 ,因为Foo.sentinel保证有一个唯一的地址——意思是x is Foo.sentinel仅当 x Foo.sentinel 时才为 true :) 因此,由于我们在 Foo.sentinel 周围创建了闭包,只有一个对象可以产生歧义情况,而且永远不会被意外使用。

关于python - 将自身数据传递给递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2443264/

相关文章:

objective-c - 为什么在 Objective-C 中允许 [object.delegate self]?

ios - 自己添加观察者

python - 有没有更有效的方法将多行字符串转换为 numpy 数组?

javascript - 如何在node.js中发送带有数据和不记名授权的POST请求?

python - 统计间隔内的寄存器数量

recursion - 归并排序,递归部分

ruby - 为什么 Ruby 实例方法调用在以 'self' 为前缀时表现不同?

python - 通过 Python 使用 wget

c - if else 递归最差时间复杂度

c++ - C++中的矩阵相邻元素组合