有没有方法可以判断我是否在Python中使用递归?

2024-03-29 10:45:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个函数来遍历用户的文件系统并创建一个表示该目录的树(树实际上是Tkinter中的一个TreeView小部件,但在功能上是一个树)。在

我能想到的最好的方法就是递归。但是,我在函数中的一个例子要求我知道它是不是“原始”函数调用,在这种情况下,文件没有父节点,还是“递归”函数调用,即函数本身发出的调用,这样我就可以给这些文件一个适当的父节点。在

在Python中有什么方法可以问函数“嘿,你是递归的吗?”或者“嘿,你从哪里打来的?”在


Tags: 文件方法函数用户功能目录节点部件
3条回答

几乎和其他语言一样-在您的例子中,您传递一个对父级的引用并检查它是否为空。如果是这样,则创建一个正确的父节点。在

在调用递归的同时包含对父级或某些级别信息的引用,这应该是简单而常见的。在

另一种方法(虽然我不喜欢)是使用pythonsinspect模块,它允许您检查例如调用堆栈。例如:

#!/usr/bin/env python

import inspect

def whocalled():
    return inspect.stack()[2][3]

def fib(n):
    print n, whocalled()
    if n < 2:
        return n
    return fib(n - 1) + fib(n - 2)

if __name__ == '__main__':
    fib(4)

将打印:

^{pr2}$

one of my cases in the function requires me to know if it is the "original" function call, in which case the files have no parent node

这似乎是一个奇怪的情况,对于特定的功能来说工作太多了。你必须建造这棵树-为什么你要知道它附着在哪里?为什么不直接构造你负责的节点并返回它们呢?在

def make_tree(path):
    return [
        make_tree(os.path.join(path, element))
        for element in get_elements(path)]

当你收到那棵树的时候,再去走走?在

如果您真的想集成它,只需传递父对象:

^{pr2}$

相关问题 更多 >