use*_*758 7 python code-analysis side-effects
在Python中是否存在用于副作用/纯度分析的现有工具,类似于Java中的http://jppa.sourceforge.net?
我不知道有什么存在,但这里有一些制作方法的一般方法:
将源文件作为文本进行分析 - 使用正则表达式来查找显示函数绝对不纯的内容-例如global关键字。出于实际目的,大多数编写得当的函数(return在函数体中只有一个语句)可能是纯函数。另一方面,如果一个函数没有语句return,那么它要么是无用的,要么是不纯粹的。
将源文件中的函数作为代码进行分析。如果单独测试一个函数会产生一个NameError,您就知道它要么是不纯的(因为它无法访问更高级别的变量),要么有错误(在定义之前引用变量或类似的变量) ),但是后一种情况应该由正常测试涵盖。检查模块的功能是function如果您想执行此操作,
对于您测试的每个函数,如果它具有相对较小的域(例如,一个输入可以是 1、2、3 或 4),那么您可以详尽地测试所有可能的输入,并以这种方式获得特定的答案。如果它有一个有限的或有限但大的域(例如 0 到 1000 之间的所有实数(无限但有限),或 -12345 到 67890 之间的所有整数),那么您可以尝试对该域中的输入选择进行采样,并用它来获得纯度的概率。但是,这种方法可能不是很有用,因为函数的域不太可能被指定,因此您可能只能在编写函数时才能检查它,在这种情况下您可能不需要分析它。
做一些聪明的事情,可能与上述技术相结合。例如,制作一个神经网络,输入作为函数的文本,输出作为纯函数的可能性。然后,您可以使用已知纯函数或不纯函数的示例来训练网络,然后将其用于未知纯度的函数。
编辑:在有人用新知识投了反对票后,我又回到了这个问题!该ast模块应该使编写您自己的分析工具变得相对容易,因为它允许您访问代码的抽象语法树。穿过这棵树并看看是否有任何东西阻碍纯洁应该是相当容易的。这是比将源文件作为文本分析更好的方法,我可能会在某个时候尝试一下。最后,这个问题可能也有用,还有这个问题,它基本上是这个问题的重复。
| 归档时间: |
|
| 查看次数: |
298 次 |
| 最近记录: |