否定功能(功能)

时间:2017-07-30 22:14:36

标签: python functional-programming

python是否有内置语句或函数否定另一个函数?更具体:一个函数接受另一个函数fun(返回布尔值)并返回一个函数,该函数是fun的否定副本。

创建简单:

def neg(fun):
    def negfun(x):
        return not fun(x)
    return negfun

使用示例:

In [1]: fun = lambda x: x < 3

In [2]: filter(fun, range(8))
Out[2]: [0, 1, 2]

In [3]: filter(neg(fun), range(8))
Out[3]: [3, 4, 5, 6, 7]

也许这是一个不好的例子,想象一下过滤器功能已经存在于其他地方并且您想要使用它。

我很惊讶我找不到更简单的方法......有没有?

1 个答案:

答案 0 :(得分:2)

您要做的是将not operatorfun

一起撰写

可悲的是,python没有任何好的“组合”功能,所以你必须自己包装它:

def compose(f, g):
    return lambda x: f(g(x))

有了这个,你可以写:

import operator

def neg(func):
    return compose(operator.not, fun)

话虽如此,我发现阅读代码或只使用lambda更容易:

neg_func = lambda x: not fun(x)