我有三个功能:
def addition(a: int, b: int):
return a + b
def increment(x: float) -> int:
return int(x) + 1
def decrement(y: int) -> int:
return x - 1
我想在increment
上组成decrement
和addition
,以获得一个具有新结构签名的函数。请注意,我还不想运行结果函数(惰性合成)。
当类似toolz.compose
之类的东西期望组合函数有一个输入/输出,而functools.partial
或toolz.curry
无法获得函数作为参数时,我该怎么做(他们将好像是一个值)。
本质上,我正在寻找部分/咖喱的高阶版本。
编辑:
我不能使用lambda,因为我希望新函数具有int
和float
的签名,并且我希望能够使用inspect.signature
从结果函数中获取此签名。
因此,给定函数a,b和c以及某些关键字k1和k2,我想将a,b连接在c之上,关键字k1和k2上,并获得一个带有a参数签名的函数与b的参数串联。
如果我们坚持上面的示例,我想要类似的东西:
new_func = pipeline(addition, via("a"), increment, via("b") decrement)
其中via
到目前为止已在管道的未绑定关键字上构成函数。
结果new_func
将是一个期望两个变量x: float
和y: int
并返回int
的函数。
答案 0 :(得分:0)
使用lambda函数怎么样?
ask_and_add = lambda : addition(get_input(),get_input())
然后您可以在需要时随时调用它:
ask_and_add()
系统会提示您输入两个连续的输入,您将得到总和。