For instance, these are defined in the operator module and can be used as such:
import operator
print operator.__add__ # alias add -> +
print operator.__sub__ # alias sub -> -
print operator.__and__ # alias and_ -> &
print operator.__or__ # alias or_ -> |
Then what is the equivalent of and and or?
print operator."and ?????" # should be boolean-and
print operator."or ????" # should be boolean-or
解决方案
These do not exist. The best you can do is to replace them with a lambda:
band = (lambda x,y: x and y)
bor = (lambda x,y: x or y)
The reason is you can not implement the complete behavior of and or or because they can short circuit.
E.G:
if variable or long_fonction_to_execute():
# do stuff
If variable is True, the long_fonction_to_execute will never be called because Python knows than or has to return True anyway. It's an optimization. It's a very desirable feature most of the time, as it can save a lot of useless processing.
But it means you cannot make it a function:
E.G:
if bor(variable, long_fonction_to_execute()):
# do stuff
In that case, long_fonction_to_execute is called even before being evaluated.
Luckily, you rarely need something like that given the fact that you an use generators and list comprehensions.