【发布时间】:2010-02-17 09:11:50
【问题描述】:
我已经尝试用很好的语法来实现函数组合,这就是我所拥有的:
from functools import partial
class _compfunc(partial):
def __lshift__(self, y):
f = lambda *args, **kwargs: self.func(y(*args, **kwargs))
return _compfunc(f)
def __rshift__(self, y):
f = lambda *args, **kwargs: y(self.func(*args, **kwargs))
return _compfunc(f)
def composable(f):
return _compfunc(f)
@composable
def f1(x):
return x * 2
@composable
def f2(x):
return x + 3
@composable
def f3(x):
return (-1) * x
print f1(2) #4
print f2(2) #5
print (f1 << f2 << f1)(2) #14
print (f3 >> f2)(2) #1
print (f2 >> f3)(2) #-5
它适用于整数,但在列表/元组上失败:
@composable
def f4(a):
a.append(0)
print f4([1, 2]) #None
哪里出错了?
【问题讨论】:
-
我认为“粉碎”是指“崩溃”?我认为“崩溃”是指“引发异常”?此外,如果我运行您发布的确切代码,它就可以正常工作。
-
我看不出
f4()没有按设计工作。也许你的期望是错误的。 -
谢谢,伊格纳西奥。我犯了一个非常愚蠢的错误。
标签: python function-composition