除了字符串,另一个也很常用的数据类型是数值与逻辑值。

数值一般用于控制循环次数,比如可用于for循环语句中的次数。逻辑值用于控制分支。比如可用于if判断、while循环判断语句的条件。

所以本文开始详细学习一下Python中的数值与逻辑值。

目录
  1. 数值的子类型
  2. 整数的表示方法
  3. 整数的不同进制表示
  4. 进制的含义
  5. 二进制
  6. Python中整数的表示范围
  7. 浮点数
  8. 复数
  9. 逻辑值
  10. 其他类型的数据表示
  11. 关联前文
  12. 结语
数值的子类型

在Python中,数值具有一些子类型,比如整数(类型名int、浮点数(类型名float、复数(类型名complex)。根据类型的不同,其表示方法也有所不同。

注意,在Python3中,整数只有int一种类型,没有long类型。在Python2中,整数有int(短整数型)和long(长整数型)两种类型。

type函数可以返回数据的类型,下面是测试数值数据类型的代码及输出结果:

python支持的四种数值类型(Python教程第7篇Python基本语法之数值与逻辑值)(1)

输出数值数据的类型

整数的表示方法

Python有2和3两个版本,其整数的表示方式略有不同,这里先讲述两者的共同点。不同点在后面列出。

在Python中,整数是由0到9之间的由阿拉伯数字组成的序列,这一点与数学中整数的表示方法相同。这里是几个整数示例:1、3、10、256……

整数的不同进制表示

没有任何前缀的整数表示十进制(Decimal),前缀0x或0X表示十六进制(Hex),前缀0O或0o表示八进制(Octal),前缀0B或0b表示二进制(Binary)。前缀都是0加一个进制英文名称的首字母,不区分大小写。

在Python2和Python3中,都没有前缀0D或0d的语法。十进制不需要前缀。


版本差异:

  1. 在Python2中,前缀0也可表示八进制。但是在Python3中,前缀0是非法语句,会产生“SyntaxError: invalid token”语法错误。在C、Java、JavaScript等语言中,八进制也是使用前缀0表示。

所有进制整数都可前缀 -(正负号)表示正负整数。其中正整数可以省略其前面的正号。

需要注意的是,只有整数才有不同进制的表示方式,浮点数、复数都只有十进制。

进制的含义

关于进制的含义,是一个庞大的课题,已经超出了Python语言范畴,是计算机基础课程。下面略微讲述一下。

进制,是进位制度的简称。表示数值达到多少时需要进位,我们常用的进制就是十进制,因为我们都有十个手指,失落的玛雅文明使用二十进制,可能他们的祖先没有鞋穿,数数时使用了脚趾。动画片里的动物多是四个手指,如果它们也能产生数学,应该使用八进制。

一个N进制的数值,使用0到N-1的数字表示,比如二进制使用0和1表示,八进制使用0、1、2、3、4、5、6、7表示,很明显三进制使用0、1、2表示,四进制使用0、1、2、3表示,不过这些进制不常用了。如果N大于10,比如常见的十六进制,除了0到9与十进制相同之外,使用a、b、c、d、e、f分别表示11到15,字母不区分大小写。

你也可以创建任意进制的数值,只需要使用足够多的表示其中0到N-1的值的符号即可。事实上,已经有64进制的数值了,著名的base64是一种基于64个可打印字符来表示二进制数据的表示方法。它常用于在网页中用字符表示图片等二进制数据。

二进制

计算机中使用二进制,是因为两种状态的电压最容易控制与稳定,这是经过实践得出的最佳设计,因为现实世界总有误差,且二进制的电路逻辑门只有四种,就在这种简单的设计哲学之下,创造了现代功能强大的计算机,计算机的应用已经深入了我们现代生活的方方面面,以致于我们现在早已经习以为常,但在古人看来,这绝对是神技!

二进制中使用0和1表示两种电路状态,0表示关闭,1表示打开,低电平就用0表示,高电平就用1表示。或者正好相反。

在二进制中,2已经超出一位二进制数的表示范围了,需要用两位二进制数10来表示,有一个著名的关于二进制的计算机笑话:“世界上有10种人,一种懂二进制,一种不懂。”其中的10就是二进制数,等于十进制数中的2。

一个二进制位数用bit表示,中文译为比特,也称比特位,简称,一般用小写的b表示,可以表示两种数据:0和1。

由于1位二进制表示的范围太小,常用8比特做为一个单元,即Byte,中文译为字节,一般用大写的B表示。一个字节可以表示2的8次方种数据。正整数表示范围0~255,一般都需要表示负整数,其表示范围就是-128~127,共256种数据。

N位二进制数据能表示2的N次方个数据。所以,对于只占一个字节的数据类型,能表示的整数范围就是2的8x1-1次方到2的8x1-1次方-1,占用2字节的数据,其范围就是2的8x2-1次方到2的8x2-1次方-1,其计算公式为2的8n-1次方到2的8n-1次方-1,其中n为占用内存字节数,在C语言等其他编程语言中,有很多2、4、8字节的整数数据类型,可以依此公式推算出任意字节的数据类型能表示的整数范围。

Python中整数的表示范围

在Python中,整数类型(Python3中的int类型和Python2中的long类型)的数据可占用的内存理论是无限的,当然实际受限于计算机本身可用的内存大小,尽管如此,其表示的范围也是一个极其巨大的值,比如可用内存是1GB(这已经远远低于现在主流个人计算机的内存总量了,其中1GB等于2的30方次字节,即1073741824),其表示的整数范围就是:2的8589934590次方到2的8589934590次方-1,这是一个非常大的值,一个简单的换算是将底数改为10,指数除以3,这是不精确的,因为2的10次方等于1024,比10的3次1000要大,所以这个转换还是变小了,尽管如此,也可以看到,其表示的范围也高达10的2863311530次方,1后面跟28亿多个0!

在Python2中,long类型与Python3中的int类型一样,即也可以表示无限大的整数。但int类型的表示范围是有限的,具体的表示范围则与CPU的位数有关:

  1. 在32位系统中,int的范围为 -2**31 到 2**31-1
  2. 在64位系统中,int的范围为 -2**63 到 2**63-1

其中两个星号是Python中的指数运算符。比如2的3次方等于8,可以记作2**3=8。

下面的Python2代码(需要安装Python2开发环境才能运行)可以判断当前计算机的Python2的int类型的具体范围(图中显示可以判断为2的30次方到31次方之间,应该就是32位系统的范围):

python支持的四种数值类型(Python教程第7篇Python基本语法之数值与逻辑值)(2)

在Python2中,当数值在int范围内时,可以后缀L或l表示long类型,无后缀会被当成int类型,当数值超出int类型范围时,无须后缀,当然加后缀也可以。以下是几个long型示例:

在Python3中,没有long类型。

浮点数

浮点数即小数,由于其小数点的位置会浮动改变,所以在计算机中通常称为浮点数。

浮点数(类型名 complex )由阿拉伯数字、指数E或e、正负号( -)表示。比如:3.14159、4.2E-10、-273.15……

浮点数只有十进制,没有十六进制、八进制、二进制等其他进制的表示。

关于浮点数需要知道的一个最重要的概念是。在计算机中有些浮点数的表示是不精确的。比如0.1,这意味着在计算这些浮点数时可能会出现精度错误。下面是Python3.10.4中的输出结果图:

python支持的四种数值类型(Python教程第7篇Python基本语法之数值与逻辑值)(3)

这不是Python语言的问题,而是整个计算机科学中的问题,所有的编程语言中均是如此,比如在JavaScript中,其结果也是一样的:

python支持的四种数值类型(Python教程第7篇Python基本语法之数值与逻辑值)(4)

因为这样的原因,浮点数不能应用于银行现金数据的处理之中,所以对于货币的处理,需要使用另外的数据类型。

money模块可以处理简单的货币数值的计算。fractions模块则提供了专业的分数计算。

复数

复数(类型名 complex由实部和虚部相加或相减表示,J或j表示虚数单位-1的平方根。

  1. 实部和虚部单位前面的数值都是浮点数类型。
  2. 如果虚部单位前面的数值为1,也不能省略,否则虚部单位会被当成变量J或j。

以下是几个复数示例:

6.23 1.5j -1.23-875J 0 1j 9.80665-8.31441J -.0224 0j

复数的概念在我们目前的教育系统中,会在高中学到。对于我们现在当前来讲没有什么用处,也很少使用的,所以了解一点即可。

虚数的单位一般用i表示,也有用j表示的,Python采用j表示,大概是因为i作为循环变量名非常常见。

逻辑值

Python中的逻辑值(类型名 bool,也称布尔值)有两个,由常量 True 和 False 来表示,分别表示逻辑真和假。

注意Python区分大小写,逻辑值的首字母大写,小写的true和False可以做为变量使用。

在Python中,逻辑值是特殊的整数, 如果将其放到一个数值上下文环境中(比方将 True 与一个数字相加), True 会被当成整数值 1, 而False则会被当成整数值 0。下面是这种情形的输出示例:

python支持的四种数值类型(Python教程第7篇Python基本语法之数值与逻辑值)(5)

其他类型的数据表示

字节型(类型名 bytes)。在Python中,可以在字符串前缀b或B表示字节数据。下面是输出示例:

python支持的四种数值类型(Python教程第7篇Python基本语法之数值与逻辑值)(6)

关联前文
  1. 「Python教程」第4篇 Python开发环境介绍
  2. 「Python教程」第5篇 Python程序结构
  3. 「Python教程」第6篇 Python基本语法之字符串
结语

本文3451字,花费了十多个小时编写,是目前三篇超过三千字的文章中的花费精力最多,也是字数最多的一篇,喜欢的朋友们多多互动。关注收藏点赞转发评论分享一条龙,可以让更多的人看到此文,也可以更及时的看到笔者的更新,这也是对笔者最大的激励。

欢迎在评论区留言想看到的教程的哪方面的内容。

,