第1章 Python语言概述

1.1 计算机基础

1.1.1 计算机特点

自从1946年第一台电子计算机问世以来,计算机科学与技术已成为近代发展速度最快的一门学科,尤其是微型计算机的出现和计算机网络的发展,使计算机的应用渗透到社会的各个领域,有力地推动了信息社会的发展。计算机作为一种通用的信息处理工具,它具有极快的处理速度、很强的存储能力、精确的计算和逻辑判断能力。其主要特点如下。

1.运算速度快

当今计算机系统的运算速度已达到每秒几十亿亿次,微机也可达每秒亿次以上,使大量复杂的科学计算问题得以解决。例如,导弹轨道的计算、大型水坝的计算、长期天气预报的计算等,过去人工计算需要几年、几十年的时间,而现在使用计算机进行计算只需几天甚至几分钟的时间。

2.计算精确度高

科学技术的发展特别是尖端科学技术的发展,需要高度精确的计算。计算机控制的导弹之所以能准确地击中预定的目标,是与计算机的精确计算分不开的。一般计算机可以有几十位甚至几百位(二进制)有效数字,计算精度可由千分之几到亿分之几,这是任何其他计算工具所望尘莫及的。

3.具有存储和逻辑判断能力

随着计算机存储容量的不断增大,可存储记忆的信息越来越多。计算机不仅能进行计算,而且能把参加运算的数据、程序以及中间结果和最后结果保存起来,以供用户随时调用;还可以对各种信息(如语言、文字、图形、图像、音乐等)通过编码技术进行算术运算和逻辑运算,甚至进行推理和证明。

4.具有自动控制能力

计算机内部操作是根据人们事先编好的程序自动控制进行的。用户根据解题需要,事先设计好运行步骤与程序,计算机十分严格地按程序规定的步骤操作,整个过程无须人工干预。

1.1.2 计算机常用的数制及编码

数制也称计数制,是指用一组固定的符号和统一的规则来表示数值的方法。编码是采用少量的基本符号,选用一定的组合原则,以表示大量复杂多样的信息的技术。计算机是信息处理的工具,任何信息必须转换成二进制数据后才能由计算机进行处理、存储和传输。

1.二进制数

我们习惯使用的十进制数由0、1、2、3、4、5、6、7、8、9十个不同的符号组成,每一个符号处于十进制数中不同的位置时,它所代表的实际数值是不一样的。例如1999可表示成:

1×1000+9×100+9×10+9×1= 1×103+9×102+9×101+9×100

式中:每个数字符号的位置不同,它所代表的数值也不同,这就是经常所说的个位、十位、百位、千位的意思。二进制数和十进制数一样,也是一种进位计数制,但它的基数是2。二进制数中0和1的位置不同,它所代表的数值也不同。例如二进制数1101表示十进制数13:

(1101)2= 1×23+1×22+0×21+1×20=8+4+0+1= 13

一个二进制数具有下列两个基本特点:

(1)有两个不同的数字符号,即0和1。

(2)逢二进一。

一般我们用()角标表示不同进制的数。例如,十进制数用()10表示,二进制数用()2表示。

2.二进制数制与其他数制

数位是指数码在一个数中所处的位置。基数是指在某种进位计数制中,每个数位上所能使用的数码的个数。例如,二进制数基数是2,每个数位上所能使用的数码为0和1两个数码。在数制中有一个规则,如果是N进制数,必须是逢N进1。下面主要介绍与计算机有关的常用的几种计数制。

(1)十进制(十进位计数制)

十进制数具有十个不同的数码符号0、1、2、3、4、5、6、7、8、9,其基数为10,特点是逢十进一,例如:

(1011)10= 1×103+0×102+1×101+1×100

(2)八进制(八进位计数制)

八进制数具有八个不同的数码符号0、1、2、3、4、5、6、7,其基数为8,特点是逢八进一,例如:

(1011)8= 1×83+0×82+1×81+1×80=(521)10

(3)十六进制(十六进位计数制)

十六进制数具有十六个不同的数码符号0、1、2、3、4 、5、6 、7、8 、9 、A、B、C、D、E、F(或小写a,b,c,d,e,f),其基数为16,特点是逢十六进一,例如:

(1011)16= 1×163+0×162+1×161+1×160=(4113)10

如表1-1所示为4位二进制数的不同进制对照表。

表1-1 4位二进制数的不同进制对照表

3.ASCII码

计算机中,对非数值的文字和其他符号进行处理时,要对文字和符号进行数字化处理,即用二进制编码来表示文字和符号。字符编码(Character Code)是用二进制编码来表示字母、数字以及专门符号。在计算机系统中,目前普遍采用的是ASCII(American Standard Code for Information Interchange)码,即美国信息交换标准代码(见表1-2)。ASCII码有7位版本和8位版本两种,国际上通用的是7位版本,7位版本的ASCII码有128个元素,只需用7个二进制位(27=128)表示,其中控制字符34个,阿拉伯数字10个,大小写英文字母52个,各种标点符号和运算符号32个。在计算机中实际用8位表示一个字符,最高位为“0”。

表1-2 ASCII码

续表

4.Unicode编码和UTF-8 编码

Unicode编码(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode编码是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一且唯一的二进制编码,以满足跨语言、跨平台进行文本转换与处理的要求。Unicode编码通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以了。

在Unicode编码中,“汉字”这两个字对应的Unicode编码是\u6c49\u5b57,“\u”表示Unicode编码。

在Unicode编码中,我们有很多方式将数字23389(孝)表示成程序中的数据,包括UTF-8、UTF-16、UTF-32。UTF是“Unicode Transformation Format”的缩写,可以翻译成Unicode字符集转换格式,即怎样将Unicode定义的数字转换成程序数据。UTF-8格式用得最多,其以字节为单位对Unicode字符进行编码。

UTF-8的特点是对不同范围的字符使用不同长度的编码。对于0x00~0x7F的字符,UTF-8编码与ASCII编码完全相同。UTF-8编码的最大长度是6个字节。Python3中的字符串是Unicode字符串而不是字节数组,这是与Python2的主要差别之一。

1.1.3 计算机系统组成

完整的计算机系统包括硬件和软件两大部分。所谓硬件,是指构成计算机的实体设备,即由物理器件构成的具有输入/输出、存储、计算、控制的实体部件。广义地说,软件是指系统中的程序以及所有相关文档的集合。我们平时讲到的“计算机”一词,都是指含有硬件和软件的计算机系统,其结构如图1-1所示。

图1-1 计算机系统组成

计算机硬件系统由运算器、控制器、存储器、输入设备/输出设备五个基本部分组成,也称计算机的五大部件。

运算器又称算术逻辑单元(Arithmetic Logic Unit,ALU),是计算机对数据进行运算处理的实体,它的主要功能是对二进制编码进行算术运算及基本逻辑运算,实现逻辑判断。运算器在控制器的控制下实现其功能,运算结果由控制器指挥送到内存储器中。

控制器主要由指令寄存器、译码器、程序计数器和操作控制器等组成。控制器用来控制计算机各部件协调工作,并使整个处理过程有条不紊地进行。它的基本功能就是从内存储器中取指令和执行指令,即控制器按程序计数器指出的指令地址从内存储器中取出该指令进行译码,然后翻译该指令,向有关部件发出控制命令,执行该指令。另外,控制器在工作过程中,还要接收各部件反馈回来的信息。

存储器具有记忆功能,用来保存信息,如数据、指令和运算结果等。存储器可分为两种:内存储器与外存储器。内存储器直接与CPU相连接,存储容量较小,但速度快,用来存放当前运行程序的指令和数据,并直接与CPU交换信息。内存储器由许多存储单元组成,每个单元能存放一个二进制数。存储器的存储容量以字节为基本单位,每个字节都有自己的编号,称为“地址”,如果要访问存储器中的某个信息,就必须知道它的地址,然后再按地址存入或取出信息。如果地址线是8位,则可以标识256单元,如表1-3所示。

表1-3 存储器地址和单元内容

为了度量信息存储容量,将8位二进制码(8bits)称为一个字节(Byte,简称B)。字节是计算机中数据处理和存储容量的基本单位。1024字节称为1K字节(1KB),1024K个字节称1兆字节(1MB),1024M个字节称为1G字节(1GB),1024G个字节称为1T字节(1TB)。现在微型计算机主存容量大多数在几个G字节以上。

计算机处理数据时,一次可以运算的数据长度称为一个“字”(Word)。字的长度称为字长。一个字可以是一个字节,也可以是多个字节。常用的字长有8位、16位、32位、64位等。如某一类计算机的字由4个字节组成,则字的长度为32位,相应的计算机称为32位机。

外存储器又称辅助存储器(简称辅存),它是内存储器的扩充。外存储器容量大,价格低,但存储速度较慢,一般用来存放大量暂时不用的程序、数据和中间结果,需要时,可成批地和内存储器进行信息交换。外存储器只能与内存储器交换信息,不能被计算机系统的其他部件直接访问。常用的外存储器有硬盘、磁带、光盘等。

输入/输出设备简称I/O(Input/Output)设备。用户通过输入设备将程序和数据输入计算机,输出设备将计算机处理的结果显示或打印出来。

常用的输入设备有:键盘、鼠标、扫描仪、数字化仪等。

常用的输出设备有:显示器、打印机、绘图仪等。

人们通常把内存储器、运算器和控制器合称为计算机主机。而把运算器、控制器做在一个大规模集成电路块上,称为中央处理器,又称CPU(Central Processing Unit)。也可以说,主机是由CPU与内存储器组成的,而主机以外的装置称为外部设备,外部设备包括输入/输出设备、外存储器等。

1.1.4 操作系统

操作系统(Operating System,OS)是管理和控制计算机各种资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件。操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。操作系统的功能包括进程管理、存储管理、设备管理和文件管理,为其他应用软件提供支持,让计算机系统所有资源最大限度地发挥作用,提供各种形式的用户界面,使用户有一个好的工作环境,为其他软件的开发提供必要的服务和相应的接口。

操作系统的种类相当多,各种设备安装的操作系统从简单到复杂,常用的是个人计算机操作系统、多处理器操作系统、网络操作系统和大型机操作系统。

桌面操作系统主要用于个人计算机。从软件上主要分为UNIX和类UNIX操作系统、Windows操作系统两大类。

(1)UNIX和类UNIX操作系统:Mac OS,Linux发行版(如Debian,Ubuntu,Linux Mint,openSUSE,Fedora,Mandrake,Red Hat,CentOS等)。

(2)Windows操作系统:Windows 98,Windows 2000,Windows XP,Windows Vista,Windows 7,Windows 8,Windows 8.1,Windows 10。

服务器操作系统一般指安装在服务器上的操作系统,比如Web服务器、应用服务器和数据库服务器等。服务器操作系统主要集中于以下两大类。

(1)UNIX/Linux系列:SUN Solaris,IBM-AIX,HP-UX,FreeBSD,Red Hat Linux,CentOS,Debian,Ubuntu Server等。

(2)Windows系列:Windows NT Server,Windows Server 2003,Windows Server 2008,Windows Server 2008 R2,Windows Server 2012,Windows Server 2016。

2014年10月1日,微软在旧金山召开新品发布会,对外展示了新一代Windows操作系统,将它命名为“Windows 10”,新系统的名称跳过了数字“9”。

计算机系统对系统中的软件资源,无论是程序或数据、系统软件或应用软件都以文件方式来管理。文件是存储在某种介质上的(如磁盘、磁带等)并具有文件名的一组有序信息的集合。文件名是由字符和数字组成的。例如,Windows文件名由以下三部分组成,格式如下:

    [<盘符>]:<文件名>[.扩展名]

格式[ ]中是可以省略的,盘符为存放文件的磁盘驱动器号,文件名由不超过255个字符组成。扩展名通常表示文件的性质,如docx表示Word文件。Windows用文件夹表示目录。D盘python目录下的hello.py文件可表示为:

    d:\python\hello.py

绝对路径是从盘符开始的路径,如:

    c:\windows\system32\cmd.exe

相对路径是从当前路径开始的路径,假如当前路径为c :\windows,那么要描述上述路径,只需输入system32\cmd.exe。实际上,严格的相对路径写法应为:

    .\system32\cmd.exe

其中,“.”表示当前路径,在通常情况下可以省略,只有在特殊情况下才不能省略。

1.1.5 程序设计语言

程序设计语言是用于书写计算机程序的语言。语言的基础是一组符号和一组规则。根据规则由符号构成的符号串的总体就是语言。在程序设计语言中,这些符号串就是程序。程序设计语言有两个方面的因素,即语法、语义。语法表示程序的结构或形式,即表示构成语言的各个符号之间的组合规律,但不涉及这些符号的特定含义,也不涉及使用者。语义表示程序的含义,即表示按照各种方法所表示的各个符号的特定含义,但不涉及使用者。虽然大多数的语言既可被编译又可被翻译,但大多数只在一种情况下能够良好运行。Python语言采取翻译这种方式。

自计算机出现以来,世界上公布的程序设计语言已有上千种之多,但是只有很少一部分得到了广泛的应用。

从发展历程来看,程序设计语言可以分为4代。

第一代:机器语言

机器语言是由二进制0、1代码指令构成,不同的CPU具有不同的指令系统。机器语言程序难学难写,需要用户直接对存储空间进行分配,编程效率极低。这种语言已经被逐渐淘汰了。

第二代:汇编语言

汇编语言指令是机器指令的符号化,与机器指令基本上存在着一一对应关系,所以汇编语言同样存在着难学难用、容易出错、维护困难等缺点。但是,汇编语言也有自己的优点:可直接访问系统接口,汇编程序翻译成机器语言程序的效率高。从软件工程角度来看,只有在高级语言不能满足设计要求,或不具备支持某种特定功能的技术性能(如特殊的输入输出)时,汇编语言才被使用。

第三代:高级语言

高级语言是面向用户的、基本上独立于计算机硬件的语言。其最大的优点是:形式上接近于算术语言和自然语言,概念上接近于人们通常使用的概念。高级语言的一个命令可以代替几条、几十条甚至几百条机器语言的指令。因此,高级语言易学易用,通用性强,应用广泛。高级语言种类繁多,可以从应用特点和对客观系统的描述两个方面对其进一步分类。C、Java和Python都是高级语言。

第四代:非过程化语言

第四代语言是非过程化语言,编码时只需说明“做什么”,不需描述算法细节。数据库查询和应用程序生成器是第四代语言的两个典型应用。用户可以用数据库查询语言(Structured Query Language,SQL)对数据库中的信息进行复杂的操作。用户只需将要查找的内容在什么地方、根据什么条件进行查找等信息告诉SQL,SQL将自动完成查找过程。应用程序生成器则是根据用户的需求“自动生成”满足需求的高级语言程序。