擅长:python、mysql、java
<p>您可以做的最简单的事情就是定义一个支持组合的<em>包装器</em>。由于比较运算符的处理,我建议使用<code>>></code>和<code><<</code>进行组合</p>
<pre><code># Assumption: the wrapped callable take a single argument
class ComposableCallable:
def __init__(self, func):
self.func = func
def __lshift__(self, other):
@ComposableCallable
def _(x):
return self.func(other.func(x))
return _
def __rshift__(self, other):
@ComposableCallable
def _(x):
return other.func(self.func(x))
return _
def __call__(self, x):
return self.func(x)
@ComposableCallable
def f(x):
return x + 1
@ComposableCallable
def g(x):
return 2 * x
assert (f << g)(3) == 7 # 2*3 + 1 == 7
assert (f >> g)(3) == 8 # (3 + 1) * 2 == 8
</code></pre>