数值类型

1. 布尔型

布尔型其实是整型的子类型,布尔型数据只有两个取值:True和False,分别对应整型的1和0。

每一个Python对象都天生具有布尔值(True或False),进而可用于布尔测试(如用在if、while中)。

以下对象的布尔值都是False:

  • None
  • False(布尔型)
  • 0(整型0)
  • 0L(长整型0)
  • 0.0(浮点型0)
  • 0.0+0.0j(复数0)
  • ""(空字符串)
  • [](空列表)
  • ()(空元组)
  • {}(空字典)
  • 用户自定义的 类实例,该类定义了方法 nonzero() 或 len(),并且这些方法返回0或False

除开上述对象之外的所有其他对象的布尔值都为True。

# 1. Python对象的布尔值
>>> bool(None)
False
>>> bool(False), bool(0), bool(0L), bool(0.0), bool(0.0+0.0j)
(False, False, False, False, False)
>>> bool(''), bool([]), bool(()), bool({})
(False, False, False, False)

# 2. 数值运算中,布尔值True和False分别对应整型的1和0
>>> int(True), int(2 < 1)
(1, 0)
>>> False + 100
100
>>> True + 100
101

2. 整型

整型等价于C中的有符号长整型(long),与系统的最大整型一致(如32位机器上的整型是32位,64位机器上的整型是64位),可以表示的范围有限。整型字面值的表示方法有3种:十进制(常用)、二进制(以“0b”开头)、八进制(以数字“0”开头)和十六进制(以“0x”或“0X”开头)。

>>> a = 0b10100
>>> type(a)
int
>>> a
20
>>> bin(20), oct(20), hex(20)
('0b10100', '024', '0x14')

3. 长整型

长整型是整型的超集,可以表示无限大的整数(实际上只受限于机器的虚拟内存大小)。长整型字面值的后面带有字母“L”或“l”(推荐使用大写的“L”)。长整型与整型的操作完全相同。

>>> a = 999 ** 8 # 整型自动转换为长整型
>>> a
992027944069944027992001L
>>> type(a)
long

从长远来看,整型与长整型正在逐步统一为一种整型类型。从Python2.3开始,再也不会报整型溢出错误,结果会被自动转换为长整型 。现在两种整型类型无缝结合,长整型后缀“L”变得可有可无 。

4. 浮点型

浮点型类似于C中的双精度浮点型(double)。浮点型字面值可以用十进制或科学计数法表示,在科学计数法中,e或E代表10,+(可以省略)或 - 表示指数的正负。

>>> type(1)
int
>>> type(1.0)
float
>>> 1 + 1.0
2.0
>>> a = 1e-2
>>> a
0.01
>>> type(a)
float
>>> pi = 3.1415926
>>> round(pi)
3.0
>>> round(pi, 4)
3.1416

5. 复数

复数与数学中的复数概念完全相同。Python中的复数有以下几个特性:

  • 复数由实数部分和虚数部分构成,表示为:real+imagj 或 real+imagJ
  • 复数的实部real和虚部imag都是浮点型
>>> a = 1+2j
>>> a
(1+2j)
>>> a.real # 实部
1.0
>>> type(a.real)
float
>>> a.imag # 虚部
2.0
>>> type(a.imag)
float