第一章、Python 概述
概述
1. Python是什么
Python是一种强大且易学的高级编程语言,它最初是由荷兰人Guido van Rossum所设计。Guido于1982年从阿姆斯特丹大学获得了数学和计算机硕士学位,他非常热衷于从事计算机编程相关的工作。那时,他使用过Pascal、C、 Fortran等编程语言。由于那个年代的计算机配置都非常低,例如一台Macintosh计算机的CPU主频只有8MHz,RAM只有128KB,一个大的数组就能占满内存,因此那时的编程语言都是站在计算机的角度上,尽力适应计算机存在的限制。例如编译器的核心目标是最大限度地进行优化以使得程序能够节省计算机的资源,提高运行效率。这就导致编程语言对程序员非常不友好。而另一方面,当时Guido在荷兰的数学和计算机研究所参与ABC语言的开发工作。ABC语言是以教学为目的,与其它大部分语言的区别在于它的目标是让用户感觉更好,例如它努力让用户更容易阅读,更容易学习和记忆。但ABC语言最终没有流行起来,其原因有多方面,除了它要求计算机的配置比较高外,由于ABC语言不是模块化的,所以该语言的扩展很困难,它也不能直接操作文件系统。
因此,Guido就萌生了自己开发一门编程语言的想法,他希望这个编程语言是真正对用户友好的,且功能强大的。于是他从1989年12月圣诞节开始开发,于1991年推出了第一个公开发行版。Python语言从一开始就具有了类、函数、异常处理、包含表和字典的核心数据类型,以及以模块为基础的扩展系统。
Python1.0版本于1994年1月发布,这个版本的主要新功能是lambda, map, filter和reduce。
Python2.0版本于2000年10月发布。这个版本的主要新功能是内存管理和循环检测垃圾收集器以及对Unicode的支持。然而,尤为重要的变化是开发的流程的改变,Python此时有了一个更透明的社区。
Python3.0版本于2008年的12月发布。但是Python3.x不向后兼容Python2.x,这意味着Python3.x可能无法正常运行Python2.x的代码。
Python 语言遵循 GPL(GNU General Public License)开源协议,也就是说你可以免费获得Python语言的源代码进行学习和研究,也可以免费使用和传播它,而不用担心版权的问题。目前,Python语言是由开源社区驱动的、由一个核心开发团队负责维护。
目前,Python语言已经成为最热门的编程语言之一,在TIOBE编程语言排行榜中,已经连续多年与C/C++和Java一起位居编程语言排行榜前三名。尤其在2021年排行榜中超越C/C++和Java而登顶第一名。下图是TIOBE发布的最流行的10大编程语言的流行趋势图,可以看出Python语言处于稳定的上升趋势中。
图1.1 TIOBE2022年编程语言流行趋势图
Python语言的最大优点就是简单、易读,它既支持面向过程的编程,又支持面向对象的编程,因此,相比于C/C++语言来说,Python语言摈弃了许多底层的操作(例如指针),从而降低了编程难度。而相比于Java语言来说,当编程规模不大时,Python编程又非常简洁。例如仅仅在屏幕输出“Hello World.”这一行字符串来说,Python只需要一行代码,而Java需要五行代码。因此在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python来教授程序设计课程。例如卡耐基梅隆大学的编程基础、麻省理工学院的计算机科学及编程导论就使用Python语言讲授。众多开源的科学计算软件包都提供了Python的调用接口,例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。
Python语言的特点
Python语言的特点主要体现在以下几方面:
(1)简单易学
简单易学是Python语言的最大特征,这也是这门语言在创建之初的一个愿景。作为一门高级编程语言,它将对计算机的底层操作隐藏起来(例如内存管理),而对程序员来说却非常友好,它的关键字以及语法已经非常接近于人类自然语言。它的语法约束也极少,在定义一个变量时无须指定其类型,在一行语句的末尾处无须加上分号表示语句结束,不过要加上的话也不会报错。此外,你可以将Python作为脚本语言,写几行简单程序进行系统调试,你也可以按照面向对象的设计模式用Python语言开发大型的项目。
(2)Python是开源和免费的
Python是开源的,这意味着所有人都可以看到Python解释器和模块的源代码,可以用来研究和学习,也可以发现其中的漏洞并进行弥补。同时Python也是免费的,也就是说任何人都可以免费地拿它来编写和运行程序,无需支付任何费用,也不用担心版权问题。
(3)解释型语言,跨平台
Python属于解释型的语言,编写好的源代码无须进行编译,它是通过Python解释器进行解释执行的。因此,只要计算机中安装了Python解释器,那么文本形式的源程序就可以被运行。Python解释器是Python源程序与具体计算机之间的屏障,程序员不用关心计算机系统的特征,只要按照Python语法要求写好了源程序,就可以在安装了Python解释器的任何计算机平台上运行。事实上,Python语言为多种平台开发了相应的解释器,包括Windows、Mac、Linux,等等。因此,Python语言是跨平台的。
(4)面向对象,但不强制使用面向对象
Python语言本身是一门面向对象的编程语言,在该语言中一切皆是对象。它支持面向对象的设计模式。但同时,Python也支持面向过程的编程和函数式编程模式。因此可以说,Python语言同时融合了面向过程、函数式和面向对象编程范式的语言,你可以根据需要进行任意选择。
(5)功能强大,模块众多
Python语言另一个优点就是可扩展性,这使得Python拥有众多的扩展库,极大地增强了了Python语言的能力。例如使用最广泛的扩展库就是经典的科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。其次,像scikit-image和Pillow(PIL)库能够用来进行图像处理,django/tornado/flask能够进行Web开发,scikit-learn库能够进行机器学习,等等。
因此Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。
Python语言的应用领域主要包括:科学计算,Web开发,网络爬虫,自动化运维,应用软件开发,数据分析,人工智能。
Python语言的缺点
Python语言的缺点目前主要表现在两方面:
(1)运行速度慢
Python程序运行速度慢的原因主要有两方面,首先它是解释型的语言,运行速度慢是解释型语言的通病。毕竟没有经过编译过程,也就是没有经过优化,因此运行速度慢是难以避免的。其次,Python语言为了方便程序员编程,背后做了很多工作,其代价就是导致运行速度慢。例如在定义变量时无须指定其类型,但是Python语言会根据其赋值自动判断其类型,从而分配相应内存空间。在例如内存管理、垃圾回收等工作,这些情况也会导致Python程序运行速度慢。
另一方面,运行速度慢也是一个相对而言的问题,相对于C语言来说其运行速度慢,但是随着Python语言自身的发展,它也在不断进行优化,提高运行速度。并且,随着计算机硬件的不断提升,例如CPU主频的提升,内存的增大,Python程序运行速度问题已逐渐不为人所察觉。
(2)源代码难以加密
对于编译型的语言来说,对源程序进行编译,其本身就是一种加密过程。而Python语言是解释型语言,直接运行源代码,因此难以实现源代码加密。
Python程序的执行过程
图1.1 Python程序执行过程
安装Python
在开始Python编程之前,首先需要在计算机中安装Python。所谓安装Python,其实质就是安装Python解释器,以及众多模块(称之为Python标准库),从而使该计算机能够运行Python程序。
Python是跨平台的,它为不同的操作系统提供了安装程序,本文只介绍在Windows 10系统上安装Python。
在计算机中安装Python之前,最好先确认一下是否已经安装过了某个版本的Python,防止出现意想不到的冲突和混乱。确认的最简单方法就是打开Windows的命令提示符窗口,在其中运行命令“python”,如果返回的信息如下图所示,就表示目前已经安装了Python,并且其版本是3.11.4。
图1.2 确认计算机已经已安装Python
如果返回的信息如下图所示,则表示当前计算机中没有安装Python。
图1.3 确认计算机没有安装Python
同时,还有再确认一下计算机操作系统是32位还是64位,因为根据操作系统的不同位数,Python分别提供了不同的安装程序。
在Windows 10操作系统中安装Python有多种方式,包括(1)通过Python官网提供的安装包来安装,(2)通过Anoconda来安装,(3)通过Microsoft Store来安装。第三种安装方式就是进入微软应用商店Microsoft Store(Windows 10系统自带),然后搜索Python,接着点几次鼠标即可完成安装。这种方式的安装操作是最简单的,但是卸载却非常麻烦,因此不再详细介绍其安装方法。下面分别介绍前两种安装方法。
2.1 通过Python官网安装包来安装
首先需要下载Python官网提供的安装程序,用于Windows系统的发行版的下载地址为:
https://www.python.org/downloads/
Python提供了32位和64位两种类型安装程序,下载时需要和对应的计算机操作系统的位数相吻合。假如下载的是64位的Python,其安装文件名通常为:python-3.10.0-amd64.exe,其中的“3.10.0”表示Python的版本,“amd64”表示64位的版本。根据文件名中这两处信息可以判断所下载的Python版本以及位数。
下载的安装文件是一个可执行文件,同Windows系统中安装其它软件的方法相同:双击安装文件来启动安装过程,在安装过程中注意一些必要设置或者选项,然后点击“下一步”即可。下面详细介绍一些重要步骤。
首先看到的安装向导中第一步界面如下:
在这一步须注意两点:(1)Python提供了默认安装“Install Now”和自定义安装“Customize installation”这两种安装方式。默认安装“Install Now”的下方显示了Python的安装文件夹,即默认安装在当前用户目录下,仅当前用户可使用。如果要安装在其它指定位置,就选择自定义安装。(2)记得勾选“Add python.exe to PATH”,其作用是在安装完成后自动在用户的环境变量PATH中添加Python环境变量,不需要自己再去手动设置环境变量。
下面以选择默认安装为例,点击“Install Now”开始正式安装,安装过程无须任何操作。此时安装的内容包括标准库,编程环境IDLE,启动器和pip。安装位置在:
C:\Users\***\AppData\Local\Programs\Python
其中“***”为当前计算机的用户名,安装完成后占用空间大小约为90.6M。
安装完成后最好再验证是否安装成功。打开Windows的命令提示符窗口,然后运行命令:python,如果返回Python的版本信息,即表明安装成功,如下图所示。
这里注意一个小细节:此时的命令提示符已经由“>”变为“>>>”,前者表示Windows系统的命令提示符,其后输入和运行Windows命令,后者表示Python的提示符,表明当前已经进入Python的交互环境了,可以在此输入和执行Python命令了。
2.2 使用pip安装第三方库
Python语言的一个重要优势就是存在大量的第三方库,它们能极大地扩展Python语言的功能,也方便了程序员的编程。因此,在安装好Python之后通常还需要安装所需要的第三方库。为此,Python官方提供了一个重要的工具“pip”来管理第三方库,通过它可以在Windows的命令提示符窗口中以命令行的方式来查看、安装和卸载第三方库。在上面安装Python时就默认地安装了这个pip工具了。
首先,我们可以打开一个命令提示符窗口,然后输入命令“pip”并点击回车,就可以看到使用pip命令的帮助信息。如下图:
限于篇幅,上图只截取了部分内容。
- 查看已经安装的Python库
在安装任何第三方库之前,可以先查看一下当前已经安装的所有库。这可以通过运行命令“pip list”来实现,如下图所示:
上图显示的是本机刚安装完Python后的结果,所以只有两个包以及它们的版本信息。
- 安装第三方库
pip安装第三方库的命令语法格式是:
>pip install <packages>
其中<packages>表示要安装的库的名称。
在初学Python的时候可能还不确定自己需要哪些第三方库,那么就先安装最常用的一个库:numpy,这几乎是所有Python程序设计都会用到的库。在命令提示符窗口中运行如下命令:
>pip install numpy
安装成功后结果如下图所示:
在上图中,我们在安装好了numpy后立即通过命令“pip list”查看了安装后的结果,可以看到在前面的基础上又增加了numpy这个新安装的库。
如果要同时安装多个库的话,除了用上面的方式一个接着一个的安装外,还有一个简单的方式,就是在上述命令中将多个要安装的库的名称罗列出来,中间用空格分隔。例如,要同时安装numpy和matplotlib这两个库,就可以像下面这样一次性安装:
>pip install numpy matplotlib
事实上,还有另一种安装第三方库的命令格式:
>python -m pip install numpy
其结果是相同的。
- 卸载第三方库
通过pip卸载某个第三方库的方式与前面介绍的安装第三方库是相似的,只是将命令改为:
>pip uninstall <packages>
例如,若要卸载已经安装的numpy,就可在命令提示符窗口中运行下述命令即可:
>pip uninstall numpy
2.3 通过anaconda安装Python
通过前面介绍的方法安装了Python以及第三方库后,已经可以满足很多人的需要了。但是在实际上可能会遇到这些情况:
(1)在同一台计算机中需要安装多个不同版本的Python;
(2)不同的Python项目需要不同的第三方库,
(3)不同的项目需要同一个第三方库,但是需要的版本却不相同。
上述情况的核心问题就是Python存在大量的第三方库,而这些库之间又存在着复杂的版本依赖关系。针对上述问题,可以通过创建“虚拟环境”来解决,例如使用Virtualenv、pipenv等工具来创建。但是整个操作过程相对来说比较繁琐,对于初学Python的人不够友好。因此,Anaconda公司将Python的不同发行版、大量的第三方包以及它们之间的依赖关系等等都集成到一起,形成其产品“Anaconda”。Anaconda采用conda工具来管理Python以及大量的第三方库之间的依赖关系。除了上述功能外,Anaconda还包含了众多的软件工具,例如编程环境Spider,在商业公司的运作下,Anaconda已经发展成为面向数据科学、机器学习领域的功能强大的平台了,拥有大量的用户,很多人都称它为Python的一个发行版。
安装Anaconda也非常简单。首先到Anaconda官网下载Anaconda。目前,Anaconda推出了开源版“Anaconda Distribution”、专业版“Anaconda Professional”、商业版“Anaconda Business”等不同发行版。以免费开源版为例,下载的安装文件是一个.exe可执行文件。安装过程同其它Windows软件相同,双击该安装文件即可启动安装过程。整个安装过程中一直点击“Next”即可。
Miniconda
由于Anaconda包含了大量的第三方库以及众多的工具软件,因此它的体积显得过于庞大:安装完Anaconda会占用硬盘空间在4G以上。另一方面,Anaconda中默认包含的许多第三方库对于很多用户来说是用不着的。因此,对于初学者或者没有这么多需求的用户来说,安装庞大的Anaconda并不是一个完美的选择。这时候,可以考虑conda的另一个发行版:Miniconda。与Anaconda相同的地方是,两者都是基于conda来管理Python及其第三方库间的依赖关系,而不同的地方在于,Miniconda默认情况下并不包含众多的第三方库,它只包含最基本的Python库。就如同其名称一样,是一个缩小版的Anaconda。安装Miniconda只需要极小的硬盘空间,安装好后,则根据需要再手动安装其它的第三方库。
2.4 两种Python安装方式比较
通过Python官网下载的安装程序来安装Python显然是最“正统”的,而通过Anaconda来使用和管理Python显然更加简单方便。但是,使用Anaconda也并非没有缺点。
首先,Anaconda自动为我们安装了大量的包,导致占用了大量的电脑空间(达5G以上)。
其次,它的安装文件被分散在不同位置,导致卸载时很难彻底卸载。
第三,在Windows系统中要查看是否安装了Python以及版本时,当通过官网下载的Python来安装时,就是在命令行中键入命令“python”,如果已经安装,就会返回Python的版本信息。如果没有安装的话就不返回任何信息(而这时会自动打开Microsoft Store)。但是如果通过anaconda来安装Python的话,此时就不会返回任何信息了(因此别误认为没有安装Python)。
最后,对于初学者来说,使用Anaconda虽然很方便,但是就不太容易理解Python运行的背后机制。
运行Python程序
Python是一种解释型的编程语言,Python程序的运行过程就是Python解释器对程序进行逐行解释执行的过程。因此,当我们要运行Python程序时,就需要将程序交给Python解释器,由它来完成执行过程。那么如何将执行的Python程序“交给”Python解释器呢?事实上,在安装了Python之后,在安装目录内就会存在“python.exe”这个可执行程序,它是我们用户和Python解释器之间的窗口,我们通过它来将程序交给Python解释器去执行。具体来说,执行Python程序有两种方式:交互式命令行、执行源文件。
3.1交互式命令行
当直接运行python.exe时,就打开了一个交互式命令行窗口,它类似于我们熟悉的Windows中的DOS命令提示符窗口。在这个窗口中,我们可以输入Python命令并回车,该命令就被执行,执行的结果也会即时显示在窗口中。
在Windows系统中运行python.exe有两种途径:
第一种途径是通过Windows的命令提示符窗口来运行:按“Win+R”组合键打开“运行”窗口,输入“cmd”并按回车即可打开一个命令提示符窗口。然后在打开的命令提示符窗口中输入“python”命令并按回车,这时就进入了Python交互式命令状态。如下图所示。
注意Windows的命令提示符是“>”,而Python的命令提示符是“>>>”。
在Windows的命令提示符窗口中要能运行“python”命令的前提是在安装Python时正确设置了Python环境变量(请参阅“安装Python”这一节)。如何设置环境变量,以及环境变量的工作机制属于Windows操作系统领域的知识,需要知道的话需要去查阅相关知识,此处不再赘述。
如果没有设置环境变量,那么要运行python.exe也是可以的,这时需要知道Python的安装位置,例如:C:\Users\***\AppData\Local\Programs\Python\Python310
。然后在Windows的命令提示符窗口中进入该位置,方法是执行命令。进入该位置后,为了保险起见可以运行“dir”命令来查看“python.exe”这个程序是否存在,如下图所示。
在确认存在时,就可以运行命令“python”了。运行后的结果同样是进入了Python交互式命令状态,如下图所示。
这就是第二种运行python.exe的途径。
通过上述方式进入Python交互式命令行窗口后,就可以直接运行Python命令了(注意确认命令提示符是“>>>”)。例如我们运行“print(‘Hello, Python!’)”,如下图所示,可以立即看到运行的结果(即打印出字符串“Hello, Python!”)
再例如我们先定义变量“a = 3”,然后输出a乘以100的计算结果,如下图所示。
上述两个例子中每次执行的都是单行命令,有时候我们需要执行的命令是多行的,例如包含多行代码的if语句(假设已经定义变量“a = 3”):
if a > 5: print(‘a > 5’) else: print(‘a <= 5’)
当输入完命令“if a > 5:”并点击回车时,Python会自动识别出此时语句还没有结束,因此不会立即显示任何返回值,而是显示三个点“...”。因此你需要接着输入“print('a > 5')”。输入第二行代码时一定要注意缩进,至于缩进几个空格并没有严格限制,例如2个或者4个空格均可以。接着输入第三行代码“else:”时并不需要缩进,而输入其后的第四行代码时同样注意缩进问题。当输入完最后一行代码并回车时,行首仍然显示三个点“...”,这时需要输入“ctl + z”用来表示输入完成,这时就可以在末尾处看到程序运行的结果了。如下图所示。
通过交互式命令行窗口运行Python命令的方式的优点是即时的,能立即看到运行结果。但是其缺点是一旦执行完成后就消失了,执行结果没有被保存下来。而且,执行多行代码时很不方便,例如在调试程序过程中需要将多行代码反复地重新输入并执行。当代码的行数再增多时,其不方便性就更加明显了。这时我们可以通过执行源文件的方式来执行Python程序。
3.2执行源文件
可以将要执行的多行Python程序写到一个文件中
需要在Windows的命令行中运行。运行的时候可接收一个Python程序文件名。
为了理解这一过程,下面进行一次具体实例。为此,先用记事本新建文件,其内容只有一行Python程序:
print('Hello, Python!')
将保存的文件名修改为“HelloPython.py”(注意扩展名为.py),并将该文件放在例如计算机中D盘根目录下。
然后打开Windows命令行窗口,并进入到文件保存的目录下。在该目录下执行命令“python HelloPython.py”,即可运行该文件中的Python程序。如下图所示。
事实上,如果没有将源文件扩展名设置为.py,而是保持默认的“.txt”,那么用命令“python HelloPython.txt”仍然可以运行其中的程序的。例如:
这看起来是一个有趣的问题,Python程序的源文件的扩展名是“.py”,而此处创建的Python源程序的文件的扩展名为“.txt”,这也是Windows中用记事本创建一个文本文件的默认扩展名,但是结果却能正常运行。
如果是安装的anaconda,默认情况下,程序python.exe被安装在目录“C:\ProgramData\Anaconda3”中。这时,首先将编写的Python程序“hello.py”拷贝至该目录下,然后打开Windows的命令提示符窗口,并进入到目录“C:\ProgramData\Anaconda3”中,最后运行命令“python hello.py”,此时就可以命令的下方看到输出“Hello, Python!”
Python集成开发环境
虽然只需要一个简单的记事本就可以编写Python程序并运行它,但是对于日常的程序开发工作来说,由于要频繁地检查和定位程序中存在的错误,修改程序代码,因此这种方式的效率太低了。在现代程序设计工作中,集成开发环境(Integrated Development Environment, IDE)已经成为必不可少的工作利器,能够显著提高开发人员的工作效率。通常一个IDE集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务。
当前用于Python程序开发的IDE非常多,有的是商业收费的,有的是开源免费的,有的是多种程序设计语言通用IDE,有的是专用于Python语言程序开发的。在网上搜索关键词“Python 集成开发环境”时,就可以看到非常多的IDE。每个IDE都有其优点和适用的场景,而如何选择适合自己的IDE是一个不太容易的事情。对于初学者来说,仅编写一些小规模的Python程序,在此向大家推荐四款IDE供选择:VS Code、Spyder、Eclipse+dev、Pycharm。
(1)VS Code,就是出自名门微软公司的Visual Studio Code,能够应用于Windows、Linux和Mac 三个平台,是一款开源IDE,也是一款通用的IDE,通过安装插件可以用来编写Python程序。在推荐的这四款IDE中,VS Code的体积最小。但是它不能新建一个Project,也就是不能以工程的概念来管理程序文件。
(2)Spyder是一款专门用于Python程序开发的开源IDE,它的界面与Matlab非常相似,所以非常适合从Matlab转来进行Python编程的人。它的一个突出优点就是对数据的可视化显示。它适合于用Python进行数据科学的程序开发,但是不能进行Web开发。据说这款软件是用Python语言开发的,在使用上感到它的一个缺点就是反应速度慢。
(3)eclipse对于Java程序员来说就非常熟悉了,曾经在Java IDE市场中一统江山达多年。这也是一款通用IDE,默认用来开发Java程序,但通过安装插件能够用于开发C/C++和Python程序。例如安装一款名为PyDev的插件就可以进行Python编程。这款插件不但能够用来完成基本的Python编程,还能够用来进行基于Django框架的Web开发。
(4)PyCharm可以说是当前使用广泛的Python IDE了,从功能上来说要优于前面的三款IDE。但也正因为其功能强大,所以它突出的缺点就是占用电脑资源过多(通常占用内存在1G以上)。如果创建多个工程的话,它每次只能显示一个工程。更重要的,PyCharm分为“社区版”和“专业版”,后者功能完备,但是是商业收费的,而前者虽然是开源免费,但是删减了较多功能,尤其是不能进行Web开发。
当然了,如果只进行基本的Python编程,那么上述四款IDE都可以满足您的要求。
Spyder 2.1.5 安装文件186M,安装大小为783M。明显比VS Code要大很多。后者安装大小为300M。