是否有一种工具能够测量项目中函数调用的频率并计算 Python 代码的其他方面(出于统计目的)?
谢谢你
Python 分析器应该为您提供相当多的信息:
python -m cProfile -o fooprof myscript.py
您使用一个简单的脚本加载结果:
#!/usr/bin/env python
import pstats
p = pstats.Stats('fooprof')
p.strip_dirs().sort_stats(-1).print_stats()
或者,如果您不指定-o fooprof
结果将打印到标准输出。
请参阅http://docs.python.org/library/profile.html上的文档
我不确定您要计算哪些“其他方面”,但这将决定该函数被调用的次数。如果您对调用的“频率”感兴趣,那么您可以找到作为总执行时间和函数被调用次数的函数的平均频率。例如:
假设foo()
在 10 秒内被调用了 100 次。呼叫的平均频率为 10 次/秒。
我猜你想做静态代码分析。代码中有多少个位置调用了一个函数。
这在像 python 这样的动态语言中很难做到,因为有很多方法可以调用函数而不是通过正确的名称,甚至 python 字节码编译器也不会总是知道在一个地方将调用哪个函数,它甚至可能在执行过程中发生变化。还有标准的 OO 多态性。
考虑:
def doublefx(f, x):
return f(x)*2
print doublefx(math.sqrt, 9) # 6
f = stdin.readline()
print doublefx(getattr(math, f), 9) # ?
任何静态分析工具都无法找出 math.* 中的哪些函数将被此代码调用。即使是第一个例子也很难推理,第二个是不可能的。
以下工具对复杂性进行了一些静态分析。
PyLint 和 PyChecker 等其他分析工具更侧重于样式和可能的错误。
我从未使用过它,但看起来cProfile可能是一个不错的起点。(请注意,在该页面上提到的三个分析器中,一个(热门)是实验性的并且没有得到很好的支持,一个(配置文件)“为分析程序增加了显着的开销”,最后一个是 cProfile,所以可能会这样做。)页面顶部提供profile.py
和的源代码链接。pstats.py