python bool 函数可以很容易地用 lambda 函数取反,但是对于一些如此基本的东西来说它有点冗长且难以阅读,例如:
def is_even(n):
return n % 2 == 0
odds_under_50 = filter(lambda x: not is_even(x), range(50))
我想知道标准库中是否有执行此操作的函数,它可能如下所示:
odds_under_50 = filter(negate(is_even), range(50))
最佳答案
据我所知,没有内置函数,也没有一个流行的库可以做到这一点。
不过,您可以轻松地自己编写一个:
from functools import wraps
def negate(f):
@wraps(f)
def g(*args,**kwargs):
return not f(*args,**kwargs)
g.__name__ = f'negate({f.__name__})'
return g
然后您可以使用:
odds_under_50 = filter(<b>negate(is_even)</b>, range(50))
negate
函数适用于给定函数的任意数量的参数:如果您定义了 is_dividable(x,n=2)
。然后 negate(is_dividable)
是一个具有两个参数(一个可选)的函数,它也将接受这些参数。
关于Python否定 bool 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42561843/