Python打印出一个可视化递归

2024-07-02 14:33:41 发布

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

我有一个做递归的代码,但我想能够观察递归,但说明每个递归的深度,以及当它出来的时候。简单的如下所示。不知道我需要在哪里放置空格或制表符来实现这一点,我正在使用字符串映射\u str,然后在末尾打印出来。请参阅输出代码和示例。你知道吗

def get_process_parents(batchDate, late_process):
    global late_parents
    global map_str
    process_depends = []
    #logging.info('late_process: %s ' % late_process)
    process_depends = getprocessDependencies(batchDate, late_process)
    late_parents[late_process.get('name')] = process_depends
    map_str += (' %s ---> %s \n------>\n' % (late_process.get('name'), process_depends))
    #logging.info('Late_process Name: %s ---> Depends: %s ' % (late_process.get('name'),process_depends))
    if not process_depends:
        #logging.info('No more depends: %s' % late_process.get('name'))
        late_parents_process.add(late_process.get('name'))
        map_str += (' %s ---> %s\n ---->\n' % (late_process.get('name'), process_depends))
    else:
        for process_depend in process_depends:
            process = getprocessByName(batchDate, process_depend)
            #logging.info('process_depend %s --> state: %s ' % (process_depend, process.get('state')))
            if process.get('state') == 'Done':
                #logging.info('process depend DONE: %s' % process_depend)
                map_str += (' %s Status: %s\n ---->\n' % (process_depend, process.get('state')))

            else:
                late_parents_process.add(process.get('name'))
                get_process_parents(batchDate, getprocessByName(batchDate,process_depend))

输出:

我想要的样子

 Process_name ----> ['process dependencies 1', 'process dependencies 2'] 
------>process dependencies 1 ---->  [process dependencies 3, dependencies 4] 
       ------>dependencies 3 -----> []
       ------>dependencies 4 -----> []
------>process dependencies 2 ---->  [process dependencies 5] 
       ------>process dependencies 5 -----> [process dependencies 6] 
              ----->process dependencies 6 -----> [] 

Tags: 代码nameinfomapgetloggingdependenciesprocess
1条回答
网友
1楼 · 发布于 2024-07-02 14:33:41

你能改变函数签名吗?如果是这样,那么最简单的方法就是将函数定义为:

def get_process_parents(batchDate, late_process, depth=0):

然后在嵌套调用中使用

get_process_parents(batchDate, getprocessByName(batchDate,process_depend), depth + 1)

然后,要缩进,可以使用:

print '\t' * depth + ('%s  >... # etc, etc

如果你能避免的话,我会提醒你不要使用全局映射。你知道吗

相关问题 更多 >