python - 如何在Python中执行静态程序分析以查找具有某些属性的函数?

标签 python static-code-analysis

对于给定的任意 Python 文件,我想查找并隔离具有以下属性的所有函数:

  1. 它采用 str 文字作为参数
  2. 它返回一个 str 文字作为输出
  3. 该函数是独立的;它不依赖于全局变量或外部类中的变量/对象

我应该如何在 Python 中以可扩展的方式执行此操作?我不想自己检查文件并添加类型。

最佳答案

您可以在 Python 3.7 中使用 type hints 执行此操作。但是您需要在函数上提供类型注释。

一个简单的例子是:

import typing

def main(hello: str, world: int): -> typing.List[int]:
    x = list(range(world)
    print(x)
    return x

typing.get_type_hints(main)
>>> {'hello': str, 'world': int, 'return': typing.List[int]}

并不强制函数实际使用这些类型,但它确实使内省(introspection)变得更容易。 Mypy可以强制该函数与带注释的类型一起使用。

编辑:Google 有一个名为推断函数类型的项目,名为 pytype 。它并不完美,但它可以是向第三方包添加一些 mypy 注释的快速方法。

关于python - 如何在Python中执行静态程序分析以查找具有某些属性的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56175087/

相关文章:

java - 自动查找所有使用过一次的方法

c - 条件是多余的,或者可能存在空指针取消引用

python - 如何将 2d numpy 数组保存并显示为 RGB 伪彩色图像?

python - 在Python中生成列表长度k的所有排列的递归算法

python - 如何为 DRF 模型编写 float 列表 ModelSerializer?

python - 低特征环境的鲁棒定位

python - 如何在 python 中创建字典列表?

java - 如何在 Java 中插入、替换和删除文件区域?

java - 条件组合时的圈复杂度

c++ - 使用 -Wall 和 -Wextra 时未使用的 lambda 不会发出警告