为什么operator模块没有逻辑或的函数?
在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
在编程中,or
和 and
这两个操作符不能用函数来表示,主要是因为它们有一种叫做短路求值的特性:
False and some_function()
True or some_function()
在这种情况下,some_function()
这个函数根本不会被调用。
而如果我们假设有一个 or_(True, some_function())
,那么 some_function()
就一定会被调用,因为在调用函数之前,所有的函数参数都会被计算。