thing = ThisIsAFunction(stuff)
是否存在一种通用的方法来定义一个函数,当输入thing
作为参数时,该函数将返回stuff
?
答案 0 :(得分:4)
简短回答,不。
没有支持这种事情的内在语法,称为反转。函数的反函数是您输入其他函数的答案的地方,它会为您提供答案。
为什么?
考虑一下x^2
def square_it(x):
return x**2
如果您输入-1或1,您将得到1。如何将其映射回去?它也需要一对一的映射。在数学中,这称为injective。由于所有函数都没有此功能,因此它不是语法的一部分。
答案 1 :(得分:3)
如果在运行代码之前 ,首先使用缓存的包装器包装函数,则会发现stuff
之后在运行问题代码先前的结果:
class FunCache:
def __init__(self, fun):
self.fun = fun
self.cache = {}
def __call__(self, argument):
result = self.fun(argument)
self.cache[result] = argument
return result
def getLastArgument(self, result):
return self.cache[result]
ThisIsAFunction = FunCache(ThisIsAFunction)
thing = ThisIsAFunction(stuff)
stuff == ThisIsAFunction.getLastArgument(thing)
根据您的用例,可以有很多方法可以对此进行改进或使其适用于该情况:弱缓存,装饰器,猴子修补外部库,存储最近的参数列表等。当然,这是如果您在需要获取参数之前使用参数调用了函数,则只有一个解决方案。
答案 2 :(得分:2)
正如@AER所说,一般来说,没有内置的语法支持这种东西。我非常同意他的看法。
但是,有一个支持数学问题here的python包,但我仍然建议您自己编写该逆函数。
答案 3 :(得分:1)
否:
import ast,sys
input_str = sys.stdin.read()
first_name =`enter code here`
second_name =`enter code here`
customer_code =`enter code here`
print(first_name)
print(second_name)
print(customer_code)
现在,无论def ThisIsAFunction(stuff):
return 4
是什么,您基本上都会一直在呼叫thing(4)
。
答案 4 :(得分:1)
编辑:在评论中与@JosephSible进行了有意义的讨论后,我想指出的是,我的答案适用于找到 inverse ,这不一定是必需的。问题所要解决的问题–问题中的用例仅需要找到左逆即可。
也就是说,要想从一个函数中找到参数,该函数只需要是内射式,而不必是外射式的。
正如其他人所述,仅当函数是双射的时才存在这样的逆,这意味着它既是射影又是内射的。 here可以找到一个很好而简单的解释,但实际上重要的是该函数仅针对一个输入和一个特定输入返回一个特定的输出。
例如一个函数:
def abs(x):
if x >= 0:
return x
else:
return -x
对于abs(x) = 1
或x = 1
将具有相同的输出x = -1
。这意味着在给定abs
和abs(x) = 1
的情况下,无法确定使用了x
的哪个值。
此外,即使满足这些条件,也无法使用通用方法来找到这样的逆。编程中的子例程只是确定输入的输出的指令序列,而这些步骤通常并非无关紧要的。计算机通常无法为您完成这种“代数”运算,因此您必须分别查看每个函数并确定其逆函数。