Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在Python程序中记录每个变量赋值类型的最佳方法是什么?_Python_Profiling - Fatal编程技术网

什么';在Python程序中记录每个变量赋值类型的最佳方法是什么?

什么';在Python程序中记录每个变量赋值类型的最佳方法是什么?,python,profiling,Python,Profiling,Python是如此动态,以至于它并不总是清楚大型程序中发生了什么,并且查看一点点源代码并不总是有帮助。更糟糕的是,编辑器往往不支持在Python文件中导航到标记或导入语句的定义 补偿的一种方法可能是编写一个特殊的探查器,该探查器不是对程序计时,而是记录程序对象的运行时类型和路径,并将这些数据公开给编辑器 这可以通过sys.settrace()实现,它为每一行代码设置回调,这是pdb的实现方式,或者通过使用ast模块和导入钩子来插入代码,或者有更好的策略吗?您如何编写这样的内容,而不使其变得异常缓

Python是如此动态,以至于它并不总是清楚大型程序中发生了什么,并且查看一点点源代码并不总是有帮助。更糟糕的是,编辑器往往不支持在Python文件中导航到标记或导入语句的定义

补偿的一种方法可能是编写一个特殊的探查器,该探查器不是对程序计时,而是记录程序对象的运行时类型和路径,并将这些数据公开给编辑器


这可以通过sys.settrace()实现,它为每一行代码设置回调,这是pdb的实现方式,或者通过使用ast模块和导入钩子来插入代码,或者有更好的策略吗?您如何编写这样的内容,而不使其变得异常缓慢,并且不与极端动态(例如对属性访问的副作用)发生冲突?

我认为您无法帮助降低速度,但当您遇到STORE\u FAST STORE\u NAME STORE\u*操作码时,应该可以检测每个变量的地址

我不知道以前是否这样做过

如果您需要调试,请看,这将允许您逐步完成代码并访问任何变量

import pdb
def test():
    print 1
    pdb.set_trace() # you will enter an interpreter here
    print 2

如果您对
对象的类或另一个原型对象进行了修补,该怎么办


如果您不使用新样式的类,这可能不是最简单的。

您可能想要查看的代码-它(我认为)执行您希望执行的操作。

执行与您描述的非常类似的操作,它通过
sys.settrace
以AST和动态信息的形式使用静态信息的组合


顺便说一句,如果您在重构项目时遇到问题,请尝试一下Pythoscope。

将“大型”程序分解为较小的函数和类定义,以便查看少量源代码会有所帮助,这有什么错?分解和重构有什么问题?为什么这些技术不起作用呢?我正在研究的系统并不是“几周内就可以重构”的大系统。“重构需要几年”的时间。我没有那样的时间。