从理论上讲,and和or直接来自布尔逻辑(因此对两个布尔逻辑进行操作以生成一个布尔值),而&和|将布尔值和/或应用于整数的单个位。这里有很多关于后者到底是如何工作的问题。以下是潜在影响您的结果的实际差异:and和or短路,即True or sys.exit(1)不会退出,因为对于某个值(True or ..., False and ...)在第一个操作数中,第二个操作数不会更改结果=不需要计算。但|和&别短路-True | sys.exit(1)把你赶出REPL。(只适用于某些人?带有操作符重载的语言,包括Python:)&和|是正常的操作人员,可能会超载-and和or被伪造成语言(尽管至少在Python中,强制使用布尔语言的特殊方法可能会产生副作用)。(只适用于几种语言(见KennyTM的评论):)and和or返回(总是?我从来没有真正理解这一点,我也不需要它)一个操作数的价值,而不是True或False..这不会改变布尔表达式在条件下的意义-1 or True是1,但是1也是真的。但是它曾经被用来模拟一个条件运算符(cond ? true_val : false_val在C语法中,true_val if cond else false_val在Python中使用了几年)。为&和|,结果类型取决于操作数如何重载各自的特殊方法(True & False是False, 99 & 7是3,对于集合,它是联合/交叉.)。但即使是当。a_boolean & another_boolean如果效果相同,正确的解决方案是使用and-仅仅是因为and和or则与布尔表达式和条件关联。&和|代表一点点的旋转。