Python记录详细调用堆栈日志的方法介绍

Python020

Python记录详细调用堆栈日志的方法介绍,第1张

本文实例讲述了Python记录详细调用堆栈日志的方法。分享给大家供大家参考。具体实现方法如下:

import sysimport osdef detailtrace(info): retStr = "" curindex=0 f = sys._getframe() f = f.f_back # first frame is detailtrace, ignore it while hasattr(f, "f_code"): co = f.f_code retStr = "%s(%s:%s)->"%(os.path.basename(co.co_filename), co.co_name, f.f_lineno) + retStr f = f.f_back print retStr+infodef foo(): detailtrace("hello world")def bar(): foo()def main(): bar()if __name__ == "__main__": main()

输出:

aaa1.py( :27)->aaa1.py(main:24)->aaa1.py(bar:21)->aaa1.py(foo:18)->hello world

堆栈是算法和程序中最常用的辅助结构,其的应用十分广泛。堆栈基本应用于两个方面:

整数除法仅保留整数部分。

深度优先搜索算法(Depth First Search) :英文缩写为 DFS。是一种用于遍历或搜索树或图的算法。该算法沿着树的深度遍历树的节点,会尽可能深的搜索树的分支。当节点 v 的所在边都己被探寻过,搜索将 回溯 到发现节点 v 的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。

在深度优先遍历的过程中,我们需要 将当前遍历节点 v 的相邻节点暂时存储起来 ,以便于在回退的时候可以继续访问它们。遍历到的节点顺序符合 「后进先出」 的特点,所以深度优先搜索可以通过 「递归」或者「堆栈」 来实现。

给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。

图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。

输入:(((()

输出:False

要求判别 {{{{[[[((()))]]]}}}}

中缀表达式 A + BA + B * C; (A + B) * C

前缀表达式 + AB + A * BC ; * +ABC

后缀表达式 AB + A B C * +; AB + C*

在中缀表达式中必须有的括号,在前缀和后缀表达式中消失了

思路

1 将中缀表达式转换为全括号的形式

2 将所有的操作符移动到子表达式所在的左括号(前缀)或者右括号(后缀)处,再删除其它所有的括号