在 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没有相当于逻辑and和or运算符的函数(尽管它有一个逻辑运算符not)
当然,我可以简单地写一个有效的:
def operator_or(x,y):
return x or y
Run Code Online (Sandbox Code Playgroud)
但我想知道:为什么没有operator.or和operator.and?operator按位and和or存在,但不是逻辑的。
当然,这只是一个小烦恼,答案很可能与缺失的恒等函数相同:很容易编写一个。但这同样适用*,+那么为什么会有差异呢?