- Python语言程序设计
- 石毅 张莉 高建华主编
- 5275字
- 2025-02-25 07:01:59
1.1 Python语言概述
Python是一种面向对象的解释型计算机程序设计语言,它最初由荷兰人吉多·范罗苏姆(Guido van Rossum)研发,并于1991年首次发行。在使用Python进行开发之前,有必要先了解一下Python。本节将针对Python的特点、版本和应用领域进行介绍。
Python语言是少有的一种可以称得上简单且功能强大的编程语言。你将惊喜地发现Python语言是多么简单,它注重的是如何解决问题而不是编程语言的语法和结构。Python的官方介绍是:
Python是一种简单易学、功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程。Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。
1.1.1 Python语言的发展历史
Python语言是由吉多·范罗苏姆在1989年开发的,于1991年年初发表。吉多·范罗苏姆曾是CWI公司的一员,使用解释性编程语言ABC开发应用程序,这种语言在软件开发上有许多局限性。由于要完成系统管理方面的一些任务,需要获取Amoeba机操作系统所提供的系统调用能力,虽然可以设计Amoeba的专用语言去实现这个任务,但是吉多·范罗苏姆计划设计一门更通用的程序设计语言,Python就此诞生了。
Python语言虽然已经诞生了30余年,但是却并没有成为程序开发领域的主流程序设计语言,这是因为Python语言的动态性使程序解释执行的速度比编译型语言慢造成的。随着Python语言的不断优化以及计算机硬件技术的迅猛发展,动态语言已经越来越受到软件界的重视,其中的代表性语言有Python、Ruby、SmallTalk、Groovy等。
Python 2.0于2000年10月发布,增加了许多新的语言特性。同时,整个开发过程更加透明,社区对开发进度的影响逐渐扩大。Python 3.0于2008年12月发布,此版本不完全兼容之前的Python版本,导致用早期Python版本设计的程序无法在Python 3.0上运行。不过,Python 2.6和2.7作为过渡版本,虽基本使用Python 2的语法,但同时考虑了向Python 3.0的迁移,有些新特性后来也被移植到Python 2.6和2.7版本中。
在Python发展过程中,形成了Python 2和Python 3两个版本,目前正朝着Python 3进化。Python 2和Python 3两个版本是不兼容的,由于历史原因,原有的大量第三方函数模块是用Python 2版实现的。随着Python的普及与发展,近年来Python 3下的第三方函数模块日渐增多,使大家用起来更加方便。本书选择Windows操作系统下的Python 3版本作为程序实现环境(下载安装时的最高版本是Python 3.9.1)。书中在很多地方也介绍了Python 3与Python 2的差别。
1.1.2 Python语言的特点
人们学习程序设计往往是从学习一种高级语言开始的,因为语言是描述程序的工具,所以熟悉一种高级语言是程序设计的基础。高级语言有很多,任何一种语言都有其自身诞生的背景,从而决定了其特点和擅长的应用领域,例如,FORTRAN语言诞生在计算机发展的早期,主要用于科学计算;C语言具有代码简洁紧凑、执行效率高、贴近硬件、可移植性好等特点,广泛应用于系统软件、嵌入式软件的开发。
程序设计语言在不断地发展,从最初的汇编语言到后来的C、Pascal等语言,发展到现在的C++、Java等髙级编程语言。程序设计的难度在不断地减小,软件的开发和设计已经形成了一套标准,开发工作已经不再是复杂的任务。最初只能使用机器码编写代码,而现在可以使用具有良好调试功能的IDE环境编程。Python使用C语言开发,但是Python不再有C语言中的指针等复杂的数据类型。Python的简洁性使得软件的代码大幅度地减少,开发任务进一步简化。程序员关注的重点不再是语法特性,而是程序所要实现的任务。Python语言有许多重要的特性,而且有些特性是富有创造性的。
1.Python语言的优势
Python语言之所以能够迅速发展,受到程序员的青睐,与它所具有的特点密不可分。Python的特点可以归纳为以下几点:
(1)简单易学。Python语言的保留字比较少。它没有分号、begin、end等标记,代码块使用空格或制表键缩进的方式分隔代码。Python的代码简洁、短小,易于阅读。Python简化了循环语句,使程序结构很清晰,方便阅读。
(2)程序可读性好。Python语言和其他高级语言相比,一个重要的区别就是,一个语句块的界限完全是由每行的首字符在这一行的位置来决定的(C语言用一对大括号“{}”来明确界定语句块的边界,与字符的位置毫无关系)。通过强制程序缩进,Python语言确实使得程序具有很好的可读性,同时Python的缩进规则也有利于程序员养成良好的程序设计习惯。
(3)丰富的数据类型。除了基本的数值类型,Python提供了一些内置的数据结构,这些数据结构实现了类似Java中集合类的功能。Python的数据结构包括元组、列表、字典等丰富的复合数据类型,利用这些数据类型,可以更方便地解决许多实际问题,如文本处理、数据分析等。内置的数据结构简化了程序的设计。
(4)开源的语言。Python是开源软件,这意味着可以免费获取Python源码,并能自由复制、阅读、改动;Python在被使用的同时也被许多优秀人才改进,进而不断完善。
(5)解释型的语言。用Python语言编写的程序不需要编译成二进制代码,而可以直接运行源代码。在计算机内部,Python解释器把.py文件中的源代码转换成Python的字节码(Byte Code),然后再由Python虚拟机(Virtual Machine)一条一条地执行,从而完成程序的执行。
对于Python的解释语言特性,要一分为二地看待。一方面,每次运行时都要将源文件转换成字节码,然后再由虚拟机执行字节码。较之于编译型语言,每次运行都会多出两道工序,所以程序的执行性能会受到影响。另一方面,由于不用关心程序的编译以及库的连接等问题,所以程序调试和维护会变得更加轻松方便,同时虚拟机距离物理机器更远了,所以Python程序更加易于移植,实际上不需改动就能在多种平台上运行。
(6)面向对象的语言。面向对象程序设计(Object Oriented Programming)的本质是建立模型以体现抽象思维过程和面向对象的方法,基于面向对象编程思想设计的程序质量好、效率高、易维护、易扩展。Python正是一种支持面向对象的编程语言,因此使用Python可开发出高质、高效、易于维护和扩展的优秀程序。Python语言既可以面向过程,也可以面向对象,支持灵活的程序设计方式。
(7)健壮性。Python提供了异常处理机制,能捕获程序的异常情况。此外,Python的堆栈跟踪对象能够指出程序出错的位置和出错的原因。异常处理机制能够避免不安全退出的情况,同时能帮助程序员调试程序。
(8)跨平台性。Python程序会先被编译为与平台相关的二进制代码,然后再解释执行,这种方式和Java类似。Python编写的应用程序可以运行在Windows、UNIX、Linux等不同的操作系统上。Python作为一种解释型语言,可以在任何安装Python解释器的环境中执行,因此使Python程序具有良好的可移植性,在某个平台编写的程序无须或仅需少量修改便可在其他平台上运行。
(9)可扩展性。Python是采用C开发的语言,因此可以使用C扩展Python,可以给Python添加新的模块、新的类。同时,Python程序可以嵌入到C、C++语言开发的项目中,使程序具备脚本语言的特性。
(10)动态性。Python与JavaScript、PHP、Perl等语言类似。Python不需要另外声明变量,直接赋值即可创建一个新的变量。
(11)强类型语言。Python的变量创建后会对应一种数据类型,Python会根据赋值表达式的内容决定变量的数据类型。Python在内部建立了管理这些变量的机制,出现在同一个表达式中的不同类型的变量需要做类型转换。
(12)应用广泛。Python语言广泛应用于数据库、网络、图形图像、数学计算、Web开发、操作系统扩展等领域。Python有许多第三方库支持。例如,PIL库用于图像处理、NumPy库用于数学计算、WxPython库用于GUI程序的设计、Django库用于Web应用程序的开发等。Python不仅内置了庞大的标准库,而且定义了丰富的第三方库帮助开发人员快速、高效地处理各种工作。例如,Python提供了与系统操作相关的os库、正则表达式re模块、图形用户界面tkinter库等标准库。只要安装了Python,开发人员就可自由地使用这些库提供的功能。除此之外,Python支持许多高质量的第三方库,如图像处理库pillow、游戏开发库pygame、科学计算库numpy等,这些第三方库可通过pip工具安装后使用。
2.Python语言的局限性
Python语言虽然是一个非常成功的语言,但也有它的局限性。相比其他一些语言(如C、C++语言),Python程序的运行速度比较慢,对于速度有着较高要求的应用要考虑Python是否能满足需要。不过,这一点可以通过使用C语言编写关键模块,然后由Python调用的方式加以解决。而且现在计算机的硬件配置不断提高,对于一般的开发来说,速度已经不成问题。此外,Python用代码缩进来区分语法逻辑的方式还是给很多初学者带来了困惑,即便是很有经验的Python程序员,也可能掉入陷阱当中。最常见的情况是Tab和空格的混用会导致错误,而这是用肉眼无法分辨的。
1.1.3 Python的版本
目前,市场上Python 2和Python 3两个版本并行。相比于早期的Python 2,Python 3历经了较大的变革。为了不带给人过多的累赘,Python 3在设计之初没有考虑向下兼容,因此许多使用Python 2设计的程序无法在Python 3上正常执行。Python官网推荐使用Python 3,考虑到目前Python 2在市场上仍占有较大份额,这里针对Python 2和Python 3的部分区别会进行一些介绍。
1.print()函数替代了print语句
Python 2使用print语句进行输出,Python 3使用print()函数进行输出。示例代码如下。
Python 2:

Python 3:

2.Python 3默认使用UTF-8编码
Python 2默认使用ASCII编码,Python 3默认使用UTF-8编码,以更好地实现对中文或其他非英文字符的支持。例如,输出“北京天安门”,Python 2和Python 3的示例与结果如下。
Python 2:

Python 3:

3.除法运算
Python语言的除法运算包含“/”和“//”两个运算符,它们在Python 2和Python 3中的用法介绍如下。
(1)运算符“/”:在Python 2中,使用运算符“/”进行除法运算的方式和Java、C语言相似,整数相除的结果是一个整数,浮点数相除的结果是一个浮点数。但在Python 3中使用运算符“/”进行整数相除时,结果也会得到浮点数。示例代码如下。
Python 2:

Python 3:

(2)运算符“//”:运算符“//”也叫取整运算符,使用该运算符进行除法运算的结果总是一个整数。“//”运算符在Python 2和Python 3中的功能一致。示例代码如下。
Python 2:

Python 3:

4.异常
Python 3版本与Python 2版本的异常处理主要有以下几点不同:
(1)在Python 2中,所有类型的对象直接被抛出;在Python 3中,只有继承自BaseException的对象才可以被抛出。
(2)在Python 2中,捕获异常的语法是“except Exception,err”;在Python 3中,引入了as关键字,捕获异常的语法变更为“except Exception as err”。
(3)在Python 2中,处理异常可以使用“raise Exception,args”或者“raise Exception(args)”两种语法;在Python 3中,处理异常只能使用“raise Exception(args)”。
(4)Python 3取消了异常类的序列行为和message属性。
Python 2和Python 3处理异常的示例代码如下。
Python 2:

Python 3:

以上只列举了Python 2与Python 3的部分区别,更多内容见官方文档https://docs.python.org/3/whatsnew/3.0.html。
1.1.4 Python语言的应用领域
由于Python语言自身的特点,加上大量第三方函数模块的支持,Python语言得到了越来越广泛的应用。利用Python进行应用开发,熟练地使用各种函数模块无疑是十分重要的,但首先要掌握Python的基础知识,这是应用的基础。本书主要介绍Python程序设计的基础知识,不涉及过多的第三方资源,但在学习伊始,了解Python的应用领域及相关的函数模块是十分必要的。作为一门功能强大且简单易学的编程语言,Python主要应用在下面几个领域。
(1)Web开发。Python是Web开发的主流语言,与JS、PHP等广泛使用的语言相比,Python的类库丰富、使用方便,能够为一个需求提供多种方案;此外,Python支持最新的XML技术,具有强大的数据处理能力,因此Python在Web开发中占有一席之地。Python为Web开发领域提供的框架有Django、Flask、Tormado、Web2py等。
(2)科学计算与数据可视化。科学计算也称数值计算,是研究工程问题的近似求解方法,它是在计算机上进行程序实现的一门科学,既有数学理论上的抽象性和严谨性,又有程序设计技术上的实用性和实验性的特征。随着科学计算与数据可视化Python模块的不断产生,Python语言可以在科学计算与数据可视化领域发挥独特的作用。Python不仅支持各种数学运算,还可以绘制高质量的2D和3D图像。与科学计算领域最流行的商业软件MATLAB相比,Python的应用范围更广,可以处理的文件和数据类型更丰富。
(3)自动化运维。早期运维工程师大多使用Shell编写脚本,但如今Python几乎可以说是运维工程师的首选编程语言。在很多操作系统中,Python是标准的系统组件,大多数Linux发行版和Mac OS X都集成了Python,可以在终端下直接运行Python。
(4)网络应用。Python语言为众多的网络应用提供了解决方案,利用有关模块可方便地定制出所需要的网络服务。Python语言提供了Socket模块,对Socket接口进行了二次封装,支持Socket接口的访问,简化了程序的开发步骤,提高了开发效率;Python语言还提供了urllib、cookielib、httplib、scrapy等大量模块,用于对网页内容进行读取和处理,并结合多线程编程以及其他有关模块快速开发网页爬虫之类的应用程序;可以使用Python语言编写CGI程序,也可以把Python程序嵌入网页中运行;Python语言还支持Web网站开发,比较流行的开发框架有Web2py、Django等。
(5)游戏开发。Python在很早的时候就是一种电子游戏编程工具。目前,在电子游戏开发领域也得到越来越广泛的应用。Pygame就是用来开发电子游戏软件的Python模块,在SDL库的基础上开发,可以支持多个操作系统。使用Pygame模块,可以在Python中创建功能丰富的游戏和多媒体程序。
(6)Windows系统编程。Python是跨平台的程序设计语言,在Windows系统下,通过使用pywin32模块提供的Windows API函数接口,就可以编写与Windows系统底层功能相关的Python程序,包括访问注册表、调用ActiveX控件以及各种COM组件等程序。还有许多其他的日常系统维护和管理工作也可以交给Python来实现。
(7)数据库应用。在数据库应用方面,Python语言提供了对所有主流关系数据库管理系统的接口,包括SQLite、Access、MySQL、SQL Server、Oracle等。
(8)多媒体应用。Python多媒体应用开发可以为图形、图像、声音、视频等多媒体数据处理提供强有力的支持。
(9)人工智能。Python是人工智能领域的主流编程语言,人工智能领域神经网络方向流行的神经网络框架TensorFlow就采用了Python语言。