Python-将Tupple应用于功能性Toolz.pipe中的功能

时间:2019-05-31 14:43:37

标签: python functional-programming toolz

我想使用一个在toolz.pipe中接受一些参数的函数,但是数据输入是一个元组。我知道如何解决,但是我认为内置python库或toolz中必须有一些解决方案,我只是找不到它。

示例:

def my_func(a, b):
    return a + b

result = pipe(
    (10, 20),
    my_func,
    ...,
)
  

对于不熟悉toolz的人,pipe类似于:

def pipe(val, *functions):
    data = val
    for fn in functions:
        data = fn(data)
    return data

我尝试过的事情:

例如,我知道如何解决它:

result = pipe(
    (10, 20),
    lambda x: my_func(*x),
    ...,
)

但是我觉得这很丑,我希望能够使用某种apply 封装该lambda的函数。我这样定义了我的apply_

def apply_(func):
    return lambda x: func(*x)

result = pipe(
    (10, 20),
    apply_(my_func),
    ...,
)

但这似乎很基础,我几乎确信它必须存在 在内置的python库或toolz包中。.

问题:

是否存在某种形式的apply包装器,如我上述(apply_)所述, 我忽略了吗?

2 个答案:

答案 0 :(得分:0)

例如:

import toolz
import itertools

def my_func(a, b):
    return a + b


list(toolz.pipe(
    [(10, 20), (30, 40)],
    toolz.curry(itertools.starmap)(my_func)
))

输出:

[30, 70]

修改 我的初始解决方案不对,但是我认为itertools's starmap是可行的方法。

答案 1 :(得分:0)

toolz具有您可以使用的c.map:

import toolz as tz
from toolz import curried as c

tz.pipe(data, c.map(function), ...)