在Python 3中,operator.or_等同于按位|
,而不是逻辑or
。为什么逻辑or
没有运算符?
答案 0 :(得分:18)
or
和and
运算符因其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