【发布时间】:2017-11-17 11:22:43
【问题描述】:
(声明:不是 Python 孩子,所以请温柔)
我正在尝试使用以下方法编写函数:
def compose(*functions):
return functools.reduce(lambda acc, f: lambda x: acc(f(x)), functions, lambda x: x)
对 标量 函数按预期工作。我想使用返回元组的函数和其他接受多个参数的函数,例如。
def dummy(name):
return (name, len(name), name.upper())
def transform(name, size, upper):
return (upper, -size, name)
# What I want to achieve using composition,
# ie. f = compose(transform, dummy)
transform(*dummy('Australia'))
=> ('AUSTRALIA', -9, 'Australia')
由于dummy 返回一个元组,而transform 接受三个参数,我需要解压缩该值。
如何使用上面的compose 函数实现这一点?如果我这样尝试,我会得到:
f = compose(transform, dummy)
f('Australia')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in <lambda>
File "<stdin>", line 2, in <lambda>
TypeError: transform() takes exactly 3 arguments (1 given)
有没有办法改变compose,让它在需要的地方解压?
【问题讨论】:
标签: python functional-programming function-composition