![代替VBA!用Python轻松实现Excel编程](https://wfqqreader-1252317822.image.myqcloud.com/cover/254/43738254/b_43738254.jpg)
1.3 数字
数字类型包括整型、浮点型和复数等几种类型,是最常用的基本数据类型之一。
1.3.1 整型数字
整型数字即整数,没有小数点,可有正负之分。例如:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/024-2.jpg?sign=1739153795-BTTMkBqTETDUXYBhYt9CWTnx5N4G1yqW-0-16c0a46d7634340a8a484ecc4f5af2c7)
Python 3中的整型没有短整型和长整型之分。Python中的整型值没有大小限制,可以表示很大的数,不会溢出。例如:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/024-3.jpg?sign=1739153795-wGTCKOUiifSJiE8mgpHCY8Lnjd2IvCKm-0-2a148d24dc66a8782f4584f707c6a33e)
为了提高代码的可读性,可以给数字增加下画线作为分隔符。例如:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/024-4.jpg?sign=1739153795-Hw1OjCQBiUOqUhJQl6iEYWreGxZmh3Tz-0-dc275c2b0b8923507836d047fd033a28)
可以使用十六进制或八进制形式表示整数。常用十六进制整数表示颜色,比如可用0x0000FF表示红色:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/025-2.jpg?sign=1739153795-YT6CJ71yWHLKRh2Js8xc4vXkcYVCmNeG-0-1ec244219efa0613f2e3ea12336a16cc)
1.3.2 浮点型数字
浮点型数字带小数,有十进制和科学记数法两种表示形式。比如31.415这个浮点数可以表示为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/025-3.jpg?sign=1739153795-it0cgbblJA6AtpV08UgjMZ5JWVB8CCmb-0-fc79560991aecbdf3e7c06b0ba72f848)
或者
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/025-4.jpg?sign=1739153795-duYVu6w4PPTxi19ZIkNWcBYuo5Jf1cL6-0-26f5dac9cf39201b065b2139246c8bda)
注意,科学记数法返回的数字是浮点型的,即使字母e前面是整数也是这样的。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/025-5.jpg?sign=1739153795-BZKbsa4FqIo6NZqE29yvzDmBVzeKnvPI-0-0d7ffbbb292b604a114de07329b7924f)
整数和浮点数混合运算时,计算结果是浮点型的。例如,下面计算一个整数和一个浮点数的和。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/025-6.jpg?sign=1739153795-wiqpL23DM5bhb7cSlUfRfl0ch33q8OAX-0-21966e6819f7c02080baf1da166f07d0)
1.3.3 复数
Python支持复数。复数由实部和虚部组成,可以用a+bj或者complex(a,b)表示。复数的实部a和虚部b都是浮点型数字。
下面创建几个复数变量。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/025-7.jpg?sign=1739153795-dTDznlUuflk87KD3yMOEXkMs51pF1L8R-0-562c2fc507f96ab8904cf5b934d16d53)
其中变量b表示的复数只有虚部,实部自动设置为0。
1.3.4 类型转换
在各数字类型之间或者数字类型与字符串类型之间可以进行类型转换,类型转换函数如表1-3所示。
表1-3 类型转换函数
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/026-2.jpg?sign=1739153795-6ud4xUJMUvwzMoMCAzNqTjXqDELcIDbl-0-46c45912cf505c3a47d1348f5cb8d3f1)
下面是一些数据类型转换的例子。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/026-3.jpg?sign=1739153795-v0LSR6HwLaPxdId67BZ3P3t3OuGVvgrQ-0-06c7322d86fa08a1a9eefc3e77006889)
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/027-1.jpg?sign=1739153795-AVvgrix39UW2Qq7ryxNXXOUCBmEZ5UcA-0-64568c826b6c297e3b6a463331e09367)
注意:将浮点型转换为整型时会失去精度,Python直接将小数部分去掉,而不是进行四舍五入。
在进行类型转换以后,在内存中生成一个新的对象,而不是对原对象的值进行修改。下面用id()函数查看变量a、b、c和d的内存地址。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/027-2.jpg?sign=1739153795-R4upZG1MgkAFht3hI2dmHQpprxB3Vt9z-0-9a9a6192a29893e3ae4ec06b889b3afe)
可见,各变量具有不同的内存地址,转换后生成的是新对象。
1.3.5 Python的整数缓存机制
在命令行模式下,Python对 [-5,256] 范围内的整数对象进行缓存。这些比较小的整数被使用的频率比较高,如果不进行缓存,则每次使用它们时都要进行分配内存和释放内存的操作,会大大降低运行效率,并造成大量内存碎片。现在将它们缓存在一个小的整型对象池中,能提高Python的整体性能。
下面的代码给两个变量都赋值100,用is比较它们的内存地址。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/027-3.jpg?sign=1739153795-e402KrQTSmAxMM9njjtAiSF7O09W6bk9-0-502fd0d11c2cee4e4c8d6d244c120c75)
可见,它们的地址是相同的。所以,赋值100给a以后的变量,它们指向同一个对象,而不是重新分配内存空间。
下面的代码给两个变量都赋值500,用is比较它们的内存地址。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/027-4.jpg?sign=1739153795-liOeqJX7NAfjO2KPCKlbI32xJ6DVsmdG-0-80559d13034e5f8b4a1966ef0fbc9730)
因为500超出了[-5,256]的范围,在命令行模式下,Python不再提供缓存,所以a和b指向两个不同的对象。
注意:在PyCharm中或者保存为文件执行时,提供缓存的数字范围更大,为[-5,任意正整数]。