[]
整数
能够应对所有规模的整数,自然涵盖负数,其程序内形式与数学符号完全一致,诸如:1,100,-8080,0等。
计算机因为运用二进制,因此,在特定情况下,借助十六进制来表示整数会更为便捷,十六进制采用0x作为标识,并使用0到9以及a到f的字符来构成数值,比如,这种情况经常出现,还有其他类似场景。
对于数值非常庞大时,数其中零的数量十分困难。可以使用下划线在数字内部进行分隔处理,这样表示的数值与直接书写完全相同。十六进制数值同样可以采用这种方式记录。
浮点数
小数点位置能够改变的数据类型被称为浮点数,这种称呼源于其采用科学计数法时的特性,此时小数点的位置是灵活的,例如1.和12.3乘以10的8次方表示的数值完全一样,都属于浮点数的范畴,这种数据类型可以用带有小数点的形式书写,常见的例子有1.23,3.14,以及-9.01等等。对于数值极端偏大或偏小的情况,需要借助科学计数法来记录,将基数10用符号e来替代,例如1.23乘以10的9次方可以记作1.23e9,或者12.3乘以10的8次方可以记作12.3e8,同样地,0.00001可以写成1.2e-5等等。
整型和实型在机器里的记录方法不一样,整型计算总不会出偏差,(除法算起来也准吗?其实准的),而实型计算可能会产生舍入误差。
字符串
字符串用单引号或双引号围起来,包含任意字符,例如单引号里的abc,双引号里的xyz等。单引号和双引号只是标记符号,并非字符串内容,所以字符串abc仅由a,b,c这三个字符构成。若”也算作一个符号,便能够以“”将其包围,例如“我很好”所含的元素有我,’,好这三个部分。
如果字符串中同时出现单引号和双引号,该如何处理?可以使用反斜杠进行转义,例如
'I\'m \"OK\"!'
表示的字符串内容是:
I'm "OK"!
布尔值
布尔值与布尔代数的表现形式完全相同,一个布尔值仅包含True、False两种取值,非此即彼,在编程中可以直接运用True、False来标示布尔值,务必注意字母大小写,亦可通过执行布尔运算来得出布尔值
>>> True
True
>>> False
False
>>> 3 > 2
True
>>> 3 > 5
False
布尔值能够借助and、or以及not进行运算处理。其中,and表示的是逻辑与,当参与运算的所有值均为True时,其结果才为True。
>>> True and True
True
>>> True and False
False
>>> False and False
False
>>> 5 > 3 and 3 > 1
True
空值与变量
空值是一种特殊标记,以None呈现。None不同于零,因为零具有实际意义,而None代表一个特殊的空白状态。
另外,系统内置了序列、映射等不同形式的数据集合,并且支持用户根据需求定义新的数据结构,具体内容将在后续章节中进行说明。
变量在计算机程序中的含义,大体上和中学阶段代数方程里的未知数相同,不过,在编程领域,变量不仅限于数值,同样能够代表各种不同的数据形式。
在程序里,变量通过一个名称来代表,名称由大小写字母、数字以及下划线构成,但数字不能放在首位,例如:
a = 1
变量a是一个整数。
t_007 = 'T007'
字符串和编码
字符编码
我们之前提到过,字符串属于一种数据类型,不过,字符串比较独特的地方在于它还牵涉到编码的问题。
计算机只认识数字,要处理文字,就需要先将文字转换成数字才能进行操作。最初设计的计算机以8个比特作为单位构成一个字节,因此一个字节所能记录的最大数值是255,换算成二进制就是255,若要记录更大的数值,就必须使用更多的字节。比如两个字节能够记录的最大数值是六万五千五百三十五,而四个字节所能记录的最大数值是。
计算机由美国人发明,所以最初仅包含127个字符进行编码,这些字符包括大小写英文字母、数字以及部分符号,这种编码方案被称为ASCII编码,其中大写字母A对应的编码值为65,小写字母z对应的编码值为122。
处理汉字时显然单个字节不够用,至少要两个字节,而且不能和ASCII编码相冲突,因此,中国制定了编码方案,用来将中文字符纳入其中。
可以想象的是,全球存在众多语言种类,日本将日文编码至其中,韩国将韩文编码至Euc-kr里,每个国家都有各自的标准体系,这就势必要产生矛盾,其后果是,在多种语言交织的文档里,呈现时会显现出错乱字符。
所以,编码方案被提出来了。将所有语言整合进一个统一的编码体系,这样便不会出现乱码现象了。
规范持续演进,当前普遍采用UCS-16编码方案,该方案以双字节记录单个字符,若涉及罕见字符,则需使用四字节表示。当代操作系统及多数编程语言均能直接兼容该编码方式。
当前,需要梳理ASCII编码与其他编码的不同之处:ASCII编码仅占用一个字节,而其他编码一般需要两个字节。
字母A用ASCII编码是十进制的65,二进制的;
字符0的ASCII编码值是十进制的48,二进制的,需要留意的是,字符'0'和整数0并不相同。
汉字已经不在ASCII编码范围之内,它的编码值是十进制的20013,二进制的01101。
可以推测,若将ASCII编码的A进行转换,只需在前面添加零即可,所以A的编码是00001。
新的麻烦又冒出来了:一旦采用编码方式,乱码现象便不再存在。不过,倘若你输入的内容几乎都是英文,那么相较于ASCII编码,这种编码方式会占用双倍的存储容量,在数据保存和传输方面显得相当不经济。
因此,出于节省考虑,后来研发了将编码变为“可变长度编码”的UTF-8编码方式,这种编码方法会依据字符数值差异,使用1到6个字节进行表示,一般英文字母只需1个字节,汉字大多占用3个字节,而非常罕见的字符才可能需要4到6个字节,倘若传输内容多为英文字符,采用UTF-8编码能够有效节省存储空间。
UTF-8编码具备一个突出的优点,ASCII编码本质上属于UTF-8编码的范畴,因此,众多仅兼容ASCII编码的旧式软件,依然能够在UTF-8编码环境中正常运行。
理解了ASCII与UTF-8的关联,我们能够归纳出当前计算机系统普遍采用的字符编码运作机制:
计算机内存中,所有数据都采用同一套编码方案,一旦要存储于硬盘或进行传输,便会转换成UTF-8编码格式。
在文本编辑器中处理时,从文档中载入的UTF-8字符会被转为字符存入内存,编辑工作结束后,将字符转换回UTF-8格式并写入文件。
字符串
搞清楚了令人头疼的字符编码问题后,我们再来研究的字符串。
在当前最新的三个版本里,字符串是以编码形式存在的,也就是说,这些字符串能够支持多种语言,比如:
>>> print('包含中文的str')
包含中文的str
针对单个字符的编码,设有ord()函数可以取得字符的数值形式,chr()函数则能将数值转换成相应字符。
>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(25991)
'文'
如果知道字符的整数编码,还可以用十六进制这么写str:
>>> '\u4e2d\u6587'
'中文'
两种写法完全是等价的。
字符串属于str类型,它在内存中的表现形式是字符序列,一个字符会占用一定数量的字节空间。当需要将字符串发送到网络或者存储到硬盘时,就必须将其转换成以字节作为基本单位的bytes格式。
对bytes类型的数据用带b前缀的单引号或双引号表示:
x = b'ABC'
需要留意区分'ABC'与'b'ABC',前者属于字符串类型,后者虽然表面上的文本与前者相同,但字节表示的每个字符仅占据一个字节的存储空间。
用符号标示的字符串借助特定函数能够转化为设定的字节序列,比如:
将字符串ABC进行ASCII编码转换,得到其对应的二进制表示形式,每个字符都被转换成了对应的ASCII码值
b'ABC'
将文字内容转换成字节序列,采用utf-8编码方案,得到对应编码后的结果
中文文本内容,包含特殊字符
将文字内容转换成字符编码,采用英文字符集合,转换过程会中断,无法完成,结果呈现乱码现象
程序错误记录,最新调用信息在首位:
File "", line 1, in
编码错误:使用ascii编码时,无法对位置0-1的字符进行编码,因为其数值超出了128的范围。
英文文本可转化为ASCII字节码,其内容保持不变,含中文的文本能转为UTF-8字节码。中文文本不能转为ASCII字节码,因为其编码范围超出ASCII的界限,转换时会引发错误。
在二进制数据里,那些不能被解释成ASCII码的文字部分,会以\x加上两位十六进制数的形式来表示。
如果从网络或磁盘获取了字节序列,那么得到的就是字节类型的数据。要将字节类型转换成字符串类型,就必须调用对应的方法。
将字符串ABC按照ASCII编码进行解码转换,得到解码后的结果
'ABC'
将字符串b中的中文部分解码成utf-8格式的文本,解码后的内容就是中文文本
'中文'
如果bytes中包含无法解码的字节,()方法会报错:
将特定编码的字符串解析为可读文本,需要采用正确的字符集方案,本例中应选用utf-8格式,通过解码操作将二进制数据转化为普通文本形式,最终得到的是无乱码的中文显示结果
Traceback (most recent call last):
...
解码时发生错误,因为字节0xff在位置3处作为起始字节无效,无法用utf-8编码解码。
倘若字节序列里仅存在极少数无用字符,能够输入空字符串来舍弃这些不准确的字节
将特定字符串按照指定编码进行解码时,可以忽略错误字符,得到另一个字符串结果
'中'
要计算str包含多少个字符,可以用len()函数:
>>> len(b'ABC')
3
字符串b的长度为6个字符,其中包含四个汉字,两个字节
6
计算字符串中文的 utf-8 编码字节长度,结果为六个字符。
6
可以知道,单个汉字在UTF-8编码下一般需要三个字节的空间,相比之下,单个英文字符则只需要一个字节。
处理文本数据时,我们常常需要将str类型和bytes类型进行转换,为了防止出现编码错误,必须始终采用UTF-8的编码方式来执行这种类型之间的转换。
源代码本质上是一种文本文件格式,因此,如果其中混杂了中文内容,在存储源代码文件时,就必须严格选择UTF-8作为编码类型。解释程序在解析源代码时,需要明确知道文件是以UTF-8编码构建的,为此我们通常在文件起始位置添加特定的声明语句
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。


客服1