为什么operator模块没有逻辑或的函数?

15 投票
3 回答
768 浏览
提问于 2025-04-17 04:59

在Python 3中,operator.or_这个东西其实是跟位运算符|相等的,而不是跟逻辑运算符or相等。那么,为什么没有专门的运算符来表示逻辑or呢?

3 个回答

2

如果你不介意其他人提到的没有短路行为的问题,可以试试下面的代码。

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

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

这两个函数都可以接受一个包含两个或更多元素的集合(比如列表、元组,甚至生成器),所以下面的写法也是可以的:

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

想了解更多细节,可以查看相关的文档: http://docs.python.org/py3k/library/functions.html#all

9

逻辑或是一种控制结构,它用来决定代码是否会被执行。想想看:

1 or 1/0

这段代码不会报错。

而下面这段代码报错,不管这个函数是怎么实现的:

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

在编程中,orand 这两个操作符不能用函数来表示,主要是因为它们有一种叫做短路求值的特性:

False and some_function()
True or some_function()

在这种情况下,some_function() 这个函数根本不会被调用。

而如果我们假设有一个 or_(True, some_function()),那么 some_function() 就一定会被调用,因为在调用函数之前,所有的函数参数都会被计算。

撰写回答