为什么操作员模块没有逻辑或功能?

时间:2011-10-25 19:21:40

标签: python python-3.x bitwise-operators

在Python 3中,operator.or_等同于按位|,而不是逻辑or。为什么逻辑or没有运算符?

3 个答案:

答案 0 :(得分:18)

orand运算符因其short-circuiting行为而无法表示为函数:

False and some_function()
True or some_function()

在这些情况下,永远不会调用some_function()

另一方面,假设的or_(True, some_function())必须调用some_function(),因为函数参数总是在调用函数之前进行求值。

答案 1 :(得分:7)

逻辑或是控制结构 - 它决定是否正在执行代码。考虑

1 or 1/0

会抛出错误。

相反,无论函数如何实现,以下都会抛出错误:

def logical_or(a, b):
  return a or b
logical_or(1, 1/0)

答案 2 :(得分:1)

如果你不介意别人提到的缺乏短路行为;你可以试试下面的代码。

all([a, b]) == (a and b)

any([a, b]) == (a or b)

它们都接受具有2个或更多元素的单个集合(例如列表,元组甚至生成器),因此以下内容也是有效的:

all([a, b, c]) == (a and b and c)

有关详细信息,请查看相关文档: http://docs.python.org/py3k/library/functions.html#all