5.10 布尔运算 Boolean operations

Boolean operations have the lowest priority of all Python operations:

布尔运算符在所有Python运算符中有最低的优先级:

Download entire grammar as text.

In the context of Boolean operations, and also when expressions are used by control flow statements, the following values are interpreted as false: None, numeric zero of all types, empty sequences (strings, tuples and lists), and empty mappings (dictionaries). All other values are interpreted as true.

在布尔运算的上下文, 和控制流语句使用的表达式中, 以下值解释为假:None, 所有类型的数值零,空的有序类型对象(串, 元组和列表),空的映射对象(字典). 所有其它值解释为真.

The operator not yields 1 if its argument is false, 0 otherwise.

如果运算符not的参数为假, 它返回1, 否则返回0.

The expression x and y first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the resulting value is returned.

表达式x and y首先计算x; 如果x为假, 就返回它的值; 否则, 计算y的值, 并返回其结果.

The expression x or y first evaluates x; if x is true, its value is returned; otherwise, y is evaluated and the resulting value is returned.

表达式x or y首先计算x; 如果x为真, 就返回它的值; 否则, 计算y的值, 并返回其结果.

(Note that neither and nor or restrict the value and type they return to 0 and 1, but rather return the last evaluated argument. This is sometimes useful, e.g., if s is a string that should be replaced by a default value if it is empty, the expression s or 'foo' yields the desired value. Because not has to invent a value anyway, it does not bother to return a value of the same type as its argument, so e.g., not 'foo' yields 0, not ''.)

(注意and和or都没有限制它的结果的值和类型必须是0或1, 仅仅是最后一个计算的参数. 这在某些情况下是有用的,例如, 如果s是一个若为空就应该为默认值所替换的串, 表达式s or 'foo'就会得到希望的结果. 因为not根本不会生成一个值, 就没必要让它的返回值类型与其参数的相同, 所以, 例如, not 'foo' 返回0, 而不是'')