【发布时间】:2016-08-19 13:44:19
【问题描述】:
假设我有两个python函数f和g:
def f(x):
y = x**2 + 1
return y
def g(x):
a = x**2
b = a + 1
return b
这两个函数在功能上显然是等效的(都返回x**2 + 1)。
我对功能等价的定义如下:
如果两个函数 f 和 g 在相同的输入下总是产生相同的输出,那么 f 和 g 在功能上是等效的。
此外,假设f 和g 中不涉及全局变量。
是否可以自动确定(无需人工检查)python 函数 f 和 g 在功能上是否等效?
【问题讨论】:
-
我猜你可以检查它们是否编译成相同的字节码,但这可能会产生假阴性。
-
在误差范围内,只需尝试一堆随机输入。
-
@TigerhawkT3 你知道上面例子中的
f和g是否会编译成相同的字节码? -
@SlaterTyranus -
def r1(): return random.random()-def r2(): return random.random(). -
你可以用
dis.dis(myfunction)检查字节码。如果两个函数确实编译为相同的字节码,它们必须在功能上是等效的(至少根据编译器)。然而,正如我在上面提到的和 Slater 指出的那样,可能存在误报 - 两个功能相同的函数的不同字节码。