Python否定 bool 函数

标签 python standard-library

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/

相关文章:

python - 桩游戏

java - Java 中 iterable<Integer> 的 Collections.max 函数

c - 在 C 程序中使用 exit_failure 时出现运行时错误

python - 如何为特定版本的 python 安装biopython

c - 让 Xcode 告诉编译器不要链接到任何库,包括标准库?

python - 为什么 Python 标准库的某些模块中有 __version__ 字符串?

c++ - 返回标准容器会导致容器内容的拷贝吗?

python - python tkinter "calculator"的意外输出

python - Django获取过滤器集中最新3个结果

python - Pandas 函数 : DataFrame. apply() 运行顶行两次