将多个功能组合到一个上,每个功能使用一个特定的关键字

时间:2019-07-03 12:41:24

标签: python functional-programming toolz

我有三个功能:

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上组成decrementaddition,以获得一个具有新结构签名的函数。请注意,我还不想运行结果函数(惰性合成)。

当类似toolz.compose之类的东西期望组合函数有一个输入/输出,而functools.partialtoolz.curry无法获得函数作为参数时,我该怎么做(他们将好像是一个值)。

本质上,我正在寻找部分/咖喱的高阶版本。

编辑: 我不能使用lambda,因为我希望新函数具有intfloat的签名,并且我希望能够使用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: floaty: int并返回int的函数。

1 个答案:

答案 0 :(得分:0)

使用lambda函数怎么样?

ask_and_add = lambda : addition(get_input(),get_input())

然后您可以在需要时随时调用它:

ask_and_add()

系统会提示您输入两个连续的输入,您将得到总和。