Python标准库---九、内置类型:逻辑值检测、布尔运算、比较

上一篇文章: Python标准库---八、内置常量
下一篇文章: Python标准库---十、内置类型:数字类型

内置类型

如下部分描述了解释器中内置的标准类型。segmentfault

主要内置类型有数字、序列、映射、类、实例和异常。函数

有些多项集类是可变的。 它们用于添加、移除或重排其成员的方法将原地执行,并不返回特定的项,绝对不会返回多项集实例自身而是返回 None。spa

有些操做受多种对象类型的支持;特别地,实际上全部对象均可以被比较、检测逻辑值,以及转换为字符串(使用 repr() 函数或略有差别的 str() 函数)。 后一个函数是在对象由 print() 函数输出时被隐式地调用的。对象

逻辑值检测

任何对象均可以进行逻辑值的检测,以便在 if 或 while 做为条件或是做为下文所述布尔运算的操做数来使用。排序

一个对象在默认状况下均被视为真值,除非当该对象被调用时其所属类定义了 __bool__() 方法且返回 False 或是定义了 __len__() 方法且返回零。 下面基本完整地列出了会被视为假值的内置对象:ip

  • 被定义为假值的常量: None 和 False。
  • 任何数值类型的零: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)
  • 空的序列和多项集: '', (), [], {}, set(), range(0)

产生布尔值结果的运算和内置函数老是返回 0 或 False 做为假值,1 或 True 做为真值,除非另行说明。 (重要例外:布尔运算 or 和 and 老是返回其中一个操做数。)ci

布尔运算 --- and, or, not

这些属于布尔运算,按优先级升序排列:字符串

clipboard.png

注释:get

  1. 这是个短路运算符,所以只有在第一个参数为假值时才会对第二个参数求值。
  2. 这是个短路运算符,所以只有在第一个参数为真值时才会对第二个参数求值。
  3. not 的优先级比非布尔运算符低,所以 not a == b 会被解读为 not (a == b) 而 a == not b 会引起语法错误。

比较

在 Python 中有八种比较运算符。 它们的优先级相同(比布尔运算的优先级高)。 比较运算能够任意串连;例如,x < y <= z 等价于 x < y and y <= z,前者的不一样之处在于 y 只被求值一次(但在两种状况下当 x < y 结果为假值时 z 都不会被求值)。it

此表格汇总了比较运算:

clipboard.png

除了不一样数字类型之外,不一样类型的对象比较时绝对不会相等。 并且,某些类型(例如函数对象)仅支持简化比较形式,即任何两个该种类型的对象一定不相等。 <, <=, > 和 >= 运算符在如下状况中将引起 TypeError 异常:当比较复数与另外一个内置数字类型时,当两个对象具备没法被比较的不一样类型时,或在未定义次序的其余状况时。

具备不一样标识的类的实例比较结果一般为不相等,除非类定义了 __eq__() 方法。

一个类实例不能与相同类或的其余实例或其余类型的对象进行排序,除非该类定义了足够多的方法,包括 __lt__(), __le__(), __gt__() 以及 __ge__() (而若是你想实现常规意义上的比较操做,一般只要有 __lt__() 和 __eq__() 就能够了)。

is 和 is not 运算符没法自定义;而且它们能够被应用于任意两个对象而不会引起异常。

还有两种具备相同语法优先级的运算 in 和 not in,它们被 iterable 或实现了 __contains__() 方法的类型所支持。

上一篇文章: Python标准库---八、内置常量
下一篇文章: Python标准库---十、内置类型:数字类型
相关文章
相关标签/搜索