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