Jas*_*ker 22 python boolean language-design operators keyword
我没有意识到这一点,但显然and和or关键字不是运营商.它们不会出现在python运算符列表中.出于纯粹的好奇心,这是为什么?如果他们不是运营商,他们究竟是什么?
Ant*_* P. 44
因为它们是控制流构造.特别:
and计算结果为False,则右参数根本不会被评估or计算结果为True,那么右参数根本不会被评估因此,这不仅仅是保留词的问题.它们的行为与运算符不同,因为运算符总是会评估它们的所有参数.
你可以将它与按位二元运算符进行对比,顾名思义就是这样运算符:
>>> 1 | (1/0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>> 1 or (1/0)
1
Run Code Online (Sandbox Code Playgroud)
如您所见,按位OR(|)计算其参数.该or关键词,但是,不会在所有的时候左边参数值为True评价其右边的参数; 这就是为什么ZeroDivisionError在第二个声明中没有提出的原因.