“operator”模块中逻辑“or”等价物在哪里?

Han*_*Lub 7 python

在 Python 中,可以通过用加法或乘法运算符折叠列表来优雅地完成对大量数字的加法或乘法:

import functools, operator
lst = range(1,100)
sum  = functools.reduce(operator.add, lst)
prod = functools.reduce(operator.mul, lst)    
Run Code Online (Sandbox Code Playgroud)

+这需要运算符和的等价函数,它们分别由运算符模块*提供为 和。operator.addoperator.mul

如果我想对运算符使用相同的习惯用法or

ingredients       = ['onion', 'celery', 'cyanide', 'chicken stock']
soup_is_poisonous = functools.reduce(operator.or, map(is_poisonous, ingredients))
Run Code Online (Sandbox Code Playgroud)

...然后我发现operator没有相当于逻辑andor运算符的函数(尽管它一个逻辑运算符not

当然,我可以简单地写一个有效的:

def operator_or(x,y):
  return x or y
Run Code Online (Sandbox Code Playgroud)

但我想知道:为什么没有operator.oroperator.andoperator按位andor存在,但不是逻辑的。

当然,这只是一个小烦恼,答案很可能与缺失的恒等函数相同:很容易编写一个。但这同样适用*+那么为什么会有差异呢?

tim*_*geb 2

all是短路逻辑与。
any是短路逻辑或。

我想,不需要将带有两个参数(而不是可迭代)的版本放入模块中operator