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

时间:2019-05-16 19:05:15

标签: python static-code-analysis

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

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

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

1 个答案:

答案 0 :(得分:0)

您可以在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]}

并不强制该函数实际上使用了这些类型,但是确实使内省更加容易。 Mypy可以强制该函数使用带注释的类型。

编辑:Google有一个名为推断功能类型的项目,名为pytype。这不是完美的方法,但是它是将一些mypy注释添加到第三方程序包中的快速方法。