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]
也许这是一个不好的例子,想象一下过滤器功能已经存在于其他地方并且您想要使用它。
我很惊讶我找不到更简单的方法......有没有?
答案 0 :(得分:2)
您要做的是将not
operator与fun
可悲的是,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)