Python - 副作用/纯度分析工具?

7

如果您认为工具问题不应该被关闭,则请投票重新开放。 - Ira Baxter
1个回答

0

我不知道是否有现成的,但是这里有一些制作的通用方法:

  • 将源文件作为文本进行分析 - 使用正则表达式查找明显不是纯函数的元素,例如global关键字。从实际角度来看,大多数编写良好的仅在主体中具有return语句的函数很可能是纯函数。另一方面,如果一个函数没有return语句,则它要么是无用的,要么是不纯的。

  • 将源文件中的函数作为代码进行分析。如果在隔离状态下测试一个函数会产生NameError,则知道它要么是不纯的(因为它无法访问更高级别的变量),要么存在错误(在定义变量之前引用变量等),但后一种情况应该已经通过常规测试得到覆盖。如果您想这样做,则 inspect 模块的函数 isfunction 可能会有用。

    对于每个测试的函数,如果它具有相对较小的定义域(例如,只有一个输入可以是 1、2、3 或 4),则您可以详尽地测试所有可能的输入,并以此获得确定性答案。如果它具有有限的或有限的但很大的定义域(例如,0 到 1000 之间的所有实数(无限但有限),或在 -12345 和 67890 之间的所有整数),则您可以尝试在该定义域中对一些输入进行采样,并使用它来获得纯度的概率。但是,这种方法可能不太有用,因为函数的定义域不太可能被指定,因此您可能只能在编写函数时检查它,而在这种情况下,您可能根本不需要分析它。

  • 做一些聪明的事情,可能与上述技术结合使用。例如,创建一个神经网络,以函数的文本作为输入,以其纯度的可能性作为输出。然后,您可以训练网络以作为已知纯度或不纯度的函数的示例,并将其用于未知纯度的函数。

编辑: 有人给这个问题点了个踩,我回来了解一下新的知识!使用 ast 模块应该可以相对容易地编写自己的分析工具,就像这样,因为它允许您访问代码的抽象语法树。穿过这棵树并查看是否有任何阻止纯净性的东西应该相当容易。这比将源文件作为文本进行分析要好得多,我可能会尝试一下。 最后,this 这个问题也许也会有用,还有 this 这个,基本上是这个问题的重复。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接