如何在Python代码中找到未使用的函数?

时间:2009-03-28 16:42:42

标签: python refactoring dead-code

所以你在一个相当沉重的项目中有一些遗留代码。如何查找和删除死函数?

我见过这两个引用:Find unused codeTool to find unused functions in php project,但它们似乎分别特定于C#和PHP。

是否有一个Python工具可以帮助您找到源代码中未引用的函数(尽管有反射/等)?

6 个答案:

答案 0 :(得分:53)

在python中,您可以使用动态或静态代码分析器找到未使用的代码。动态分析器的两个示例是coveragefigleaf。它们的缺点是您必须运行代码的所有可能分支才能找到未使用的部分,但它们的优势还在于您可以获得非常可靠的结果。

或者,您可以使用仅查看代码但不实际运行代码的静态代码分析器。它们的运行速度要快得多,但由于python的动态特性,结果并不是100%准确,因此您可能需要仔细检查它们。 我想到的两个工具是pyflakesvulture。它们是互补的:Pyflakes找到未使用的导入和未使用的局部变量,而vulture找到未使用的函数,方法,类,变量和属性。

Python Package Index http://pypi.python.org/pypi提供了这些工具。

答案 1 :(得分:8)

pylint可以做你想做的事。

答案 2 :(得分:4)

我不确定这是否有用,但您可以尝试使用coveragefigleaf或其他类似的模块,这些模块会在您实际运行时记录源代码的哪些部分。脚本/应用

答案 3 :(得分:1)

由于python代码的呈现方式相当严格,基于正在寻找def function_name(..)的正则表达式构建函数列表会难吗?

然后搜索每个名称并总计它在代码中的功能次数。它自然不会考虑到评论,但只要你看看少于两个或三个实例的函数......

这是一个斯巴达,但它听起来像一个很好的困周末任务=)

答案 4 :(得分:1)

除非你知道你的代码使用反射,正如你所说,我会去寻找一个微不足道的grep。不要低估vim中星号的强大功能(在文件中搜索光标下的单词),尽管这仅限于您当前正在编辑的文件。

你可以实现的另一个解决方案是拥有一个非常好的测试套件(不幸的是很少发生),然后用一个弃用例程包装例程。如果你得到了弃用输出,这意味着该例程被调用,所以它仍然在某处使用。这甚至适用于反射行为,但当然,您无法确定在执行例行调用时是否不触发这种情况。

答案 5 :(得分:0)

不仅搜索功能名称,而且搜索所有未使用的导入包。 您需要搜索所有导入的软件包(包括别名)的代码并搜索使用的函数,然后从每个软件包创建特定导入的列表(例如,而不是import os,例如从os import listdir,getcwd等替换... ...)