我试图在Python中找到逻辑语句的功能等价物(例如和/或/不)。我以为我在operator
模块中找到了它们,但行为却截然不同。
例如,and
语句执行我想要的行为,而operator.and_
似乎需要显式类型比较,否则会抛出TypeError异常。
>>> from operator import *
>>> class A: pass
...
>>> and_(A(), True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for &: 'instance' and 'bool'
>>> A() and True
True
是否有类似operator
模块的东西,但是包含与Python语句逻辑的行为完全匹配的函数?
答案 0 :(得分:9)
函数operator.and_
和operator.or_
分别等效于按位“和”函数和“或”函数。 and
中没有代表or
和operator
运算符的函数,但您可以使用内置函数any()
和all()
。它们将单个序列作为参数,但您可以简单地传递两个条目的元组以将它们用作二元运算符。
请注意,无法将and
和or
的逻辑与您调用的任何函数完全匹配。例如
False and sys.stdout.write("Hello")
永远不会打印任何东西,而
f(False, sys.stdout.write("Hello"))
无论如何定义f()
,将始终打印输出。这也是operator
中省略它们的原因。