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

Bri*_*unt 51 python refactoring dead-code

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

我已经看到了这两个引用:查找未使用的代码工具来查找php项目中未使用的函数,但它们似乎分别特定于C#和PHP.

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

小智 56

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

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

这些工具可从Python Package Index http://pypi.python.org/pypi获得.

  • +1 秃鹫。我只是 pip 安装了它,在我的目录上运行它,它给出了我正在寻找的输出。 (12认同)

nie*_*kas 9

另一种选择是死代码Python 包。它检测全局定义但未使用的变量、函数和类名称。该工具用作静态代码检查器:它首先解析所有全局定义的名称,然后计算它们在整个代码库中被引用的次数。

您可以安装它:

pip install deadcode
Run Code Online (Sandbox Code Playgroud)

并运行它

deadcode .
Run Code Online (Sandbox Code Playgroud)

我已经实现了这个工具,因为其他工具没有为我完成这项工作。使用死代码作为 CI/CD 管道的一部分应该很方便。我希望它有帮助。


Ano*_*ous 6

pylint可以做你想要的.

  • 这个答案是错误的 - "pylint"不会报告未使用的函数,即使在单个文件中也是如此.它报告未使用的导入,参数和变量,以及函数重定义,但不报告未使用的函数(请参阅[docs](http://docs.pylint.org/features.html)).那是因为它是为检查模块/包而设计的,其中*几乎总是*是未使用的功能.这个答案有这么多的赞成,真是太疯狂了.没有人在阅读问题时投票吗? (26认同)
  • 据我所知,pylint并没有告诉你整个类/方法/功能是否未被使用.它只标记变量和导入. (9认同)
  • 它是开源的,你可以随时贡献. (2认同)