gpt4 book ai didi

python - Python 中是否有 `and` 和/或 `or` 的内置函数版本?

转载 作者:太空狗 更新时间:2023-10-29 17:20:11 26 4
gpt4 key购买 nike

这个问题是为了好玩;我不希望答案有用。

当我看到人们在 Python 中使用 reduce() 做事时,他们通常会利用 Python 中的内置函数,通常来自 operator 模块。

这个有效:

result = reduce(lambda a, b: a + b, range(5))

但通常你会看到这个:

from operator import add
result = reduce(add, range(5))

令我感到奇怪的是,operator 模块似乎没有逻辑and 的功能。它确实有按位和,但没有逻辑

假设您正在这样做:

result = reduce(lambda a, b: a and b, range(1, 6))

是否有可以在这里使用的内置函数?

我也想知道是否有内置函数可以替代

如果先将参数映射到 bool 值,则可以使用按位 and from operator,或者直接使用 bool.__and__,如下所示:

from operator import and_
result = reduce(and_, map(bool, range(1, 6)))
result = reduce(bool.__and__, map(bool, range(1, 6)))

对于 or 操作,同样使用 operator.or_()bool.__or__。但我正在寻找不需要将值映射到 bool 值的函数。

如果你确定你的值都是整数,你可以使用 operator.mul 来表示 andoperator.add 来表示 。这将是一个粗略的 hack,我不想要这个答案......特别是考虑到如果遇到很多数字并且没有一个为零,乘法会变得多么昂贵!

注意:我知道 all()any(),它们可以更好地替代 reduce() 的使用。正如我在顶部所说,我问这个是为了好玩。

注意:具有将所有值强制为 bool 的副作用的函数将是一个可接受的答案。内置的 and 关键字不会这样做:

x = 3 and 5  # sets x to 5, not to True

但出于这个问题的目的,我只对可以与 reduce() 一起执行逻辑 and or or 的函数感兴趣> 操作。

最佳答案

我猜运算符模块中没有 andor 的真正原因是不可能以短路方式评估函数参数 - 这是 bool 运算符的整点。所以你的问题的答案是否定的,没有可以模仿 和/或 的内置函数,也不可能编写一个。

all/any 应用于发电机也短路

def gen():
yield 1
yield this_wont_be_evaluated

print any(gen())

但我不知道如何让它与运行时参数一起工作

关于python - Python 中是否有 `and` 和/或 `or` 的内置函数版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15959500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com