我想使用一个在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_
)所述,
我忽略了吗?
答案 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), ...)