69

因此,您在一个相当庞大的项目中存在一些遗留代码。如何查找和删除死函数?

我看过这两个参考资料:Findused codeTool to find unused functions in php project,但它们似乎分别特定于 C# 和 PHP。

是否有 Python 工具可以帮助您找到源代码中其他任何地方都没有引用的函数(尽管有反射/等)?

4

5 回答 5

93

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

Alternatively, you can use static code analyzers that just look at your code, but don't actually run it. They run much faster, but due to Python's dynamic nature the results may contain false positives. Two tools in this category are pyflakes and vulture. Pyflakes finds unused imports and unused local variables. Vulture finds all kinds of unused and unreachable code. (Full disclosure: I'm the maintainer of Vulture.)

The tools are available in the Python Package Index https://pypi.org/.

于 2012-03-22T15:06:44.297 回答
4

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

于 2009-03-28T19:21:31.260 回答
3

由于 python 代码的呈现方式相当严格,基于 regex 寻找的函数列表会很难def function_name(..)吗?

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

这有点斯巴达,但听起来像是一个不错的困周末任务=)

于 2009-03-28T17:11:40.527 回答
2

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

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

于 2009-03-28T19:44:15.027 回答
0

它不仅搜索函数名称,还搜索所有未使用的导入包。您需要搜索所有导入包(包括别名)的代码并搜索使用的函数,然后从每个包创建特定导入的列表(示例而不是 import os,替换为 from os import listdir、getcwd、... ...)

于 2020-05-26T20:54:24.177 回答