3.1 数字类型
数字类型是Python的基础数据类型之一,主要包括整数类型、浮点数类型和复数类型。Python的数据类型用于存储数值型数据,例如日常生活中的整数、实数和复数等。它们在赋值存储后就不可再改变了,如果要改变数值则必须创建新的对象进行赋值。
3.1.1 整数类型
整数类型即对应现实生活中的整数。整数类型的数据包括正整数、负整数和零。不同于Python 2.X,在Python 3.X中没有Long(长整型)这个类型,也就是Python 3.X中的整型没有限制。在Python中区分正整数和负整数的方式和生活中一样采用符号区分,如-100、0、-3等。
虽然Python 3.X已经成为主流,但是依旧可以了解下Python 2.X中的长整型数据。为了标识长整型数据,一般在数据末尾添加大写或小写的L(通常情况下小写L和数字1不易区分,因此常用大写的L),如5623656L。
为了方便计算和书写,Python中整数可以用多种不同的进制方式书写,其格式为0+进制方式(通常为一个大写字母)+相应进制的数据。具体格式如表3-1所示。
表3-1 进制格式
3.1.2 整数的按位运算
按位运算仅对整数存在意义。按位运算结果的计算如同二进制补码的计算,用于计算有限位数的整数。理解上是对整数逐位的操作,其主要操作类型和操作类型如表3-2所示。
表3-2 按位运算操作符
【例3-1】运算符。
对于左移和右移运算符,其格式为a <<或>> b,含义为将数字a的二进制位数左移或右移b位。
【例3-2】移位运算。
对于这些常见的位运算其中有几个要点需要注意。
(1)负数的移位计数为非法操作,其可能导致ValueError错误。
(2)左移位,低位空缺补零,高位溢出舍弃;右移位,高位空缺补零,低位溢出舍弃。
(3)左移N位相当于将数乘以2的N次幂;右移N位相当于将数除以2的N次幂。
(4)对于整型数据的操作,实际上都是对其补码的操作(Python 2.X中Long型的补码相当于其补码符号位无限拓展)。
(5)位运算符和普通运算符一样存在优先级,其优先级由低到高为:
取反运算符>左移运算符>右移运算符>按位与运算符>按位异或运算符>按位或运算符
3.1.3 浮点数
浮点数相对于整数存在小数点,由整数和小数部分组成。浮点数的写法除了日常写法外,常见的还包括科学计数法写法,例如,3e14代表3×10^3。
注意:浮点数的0.0和整数的0在逻辑运算上虽然含义是一样的,但是在Python中它们的存储位置却是不同的,实例如下。
【例3-3】浮点数存储位置。
3.1.4 复数类型
复数类型对应英文Complex,复数由实数部分和虚数部分构成,可以用生活中的方式a + bj格式表示,或者用complex(a,b)表示,j可大写也可小写。
【例3-4】复数运算。
复数的实部的内建属性为real,复数的虚部的内建属性为imag,可用于输出复数的实部和虚部部分。
【例3-5】复数的实部与虚部。
从实部和虚部的输出格式可以清楚地看到复数的实部a和虚部b都是以浮点型数据进行存储的。
3.1.5 布尔类型
布尔类型严格意义上来讲不算数字类型,但是作为Python的基本数据类型之一,还是需要了解和掌握的。
布尔类型只存在两种值:True和False。布尔类型支持常规的运算,例如与运算、或运算和非运算。
【例3-6】布尔运算。
和其他语言一样,Python中的True和False同样可以和1与0等价进行常规运算。
【例3-7】特殊布尔运算。