测量代码的各个方面

时间:2011-10-07 15:56:39

标签: python code-analysis code-metrics

是否有一个工具能够测量项目中函数调用的频率并计算Python代码的其他方面(用于统计目的)?

谢谢

3 个答案:

答案 0 :(得分:2)

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,则结果将打印到stdout。

请参阅http://docs.python.org/library/profile.html

上的文档

我不确定你想要计算的“其他方面”,但这将决定如何多次次调用该函数。如果您对调用的“频率”感兴趣,那么您可以找到平均频率作为总执行时间和调用函数的次数的函数。例如:

假设在10秒内调用了foo() 100次。通话的平均频率是10 /秒。

答案 1 :(得分:1)

我想你想做静态代码分析。您的代码中有多少个位置 叫一个功能。

在像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)  # ?

任何静态分析工具都无法找出数学中的哪些函数。*将会发生 被这段代码调用。即便是第一个例子也很难推理, 第二个是不可能的。

以下工具对复杂性进行了一些静态分析。

像PyLint和PyChecker这样的其他分析工具更注重风格和可能性 错误。

答案 2 :(得分:0)

我从未使用它,但看起来cProfile可能是一个很好的起点。 (请注意,在该页面上提到的三个分析器中,一个(热门)是实验性的并且没有得到很好的支持,一个(配置文件)“为配置文件程序增加了大量开销”,最后一个是cProfile,所以可能会这样做。)页面顶部提供了profile.pypstats.py源代码的链接。