<div class="markdown_views">
<h2 id="1-python简介"><a name="t0"></a>1 Python简介</h2>
1.1 什么是Python
Python是一种面向对象的解释型计算机程序设计语言,由荷兰人吉多·范罗苏姆(Guido van Rossum)于1989年发明,第一个公开发行版发行于1991年。目前Python的最新发行版是Python3.6。
Python是纯粹的自由软件,源代码和解释器都遵循 GPL(GNU General Public License)协议。Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。
Python具有丰富和强大的库。它常被称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地集成在一起。常见的一种应用场景是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的编程语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,然后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些库可能不提供跨平台的实现。
尽管Python源代码文件(.py)可以直接使用python命令执行,但实际上Python并不是直接解释Python源代码,而是先将Python源代码编译生成Python Byte Code(Python字节码,字节码文件的扩展名一般是.pyc),然后再由Python Virtual Machine(Python虚拟机,可以简称为PVM)来执行Python Byte Code。也就是说,这里说Python是一种解释型语言,指的是解释Python Byte Code,而不是Python源代码。这种机制的基本思想跟Java和.NET是一致的。
尽管Python也有自己的虚拟机,但Python的虚拟机与Java或.NET的虚拟机不同的是,Python的虚拟机是一种更高级的虚拟机。这里的高级并不是通常意义上的高级,不是说Python的虚拟机比Java或.NET的功能更强大,而是说与Java 或.NET相比,Python的虚拟机距离真实机器的距离更远。或者可以这么说,Python的虚拟机是一种抽象层次更高的虚拟机。Python语言程序代码的编译和运行过程如下图所示。
1.2 Python的应用领域
Python是一种跨平台编程语言,理论上,Python可以运行在任何操作系统平台上。目前最常用的操作系统平台是Windows、Mac OS X和Linux。毫无疑问,这3个平台都会成为Python的主战场。
Python的简单易学、众多第三方程序库,以及运行速度快等特性让Python的应用领域异常广泛。Python的应用领域主要有以下几个方面。
- Linux/Unix运维
- 命令行程序开发
- GUI程序开发(PyQt 、Kivy等)
- Web程序开发(Django等框架)
- 移动App开发(PyQt 、Kivy等)
- 服务端程序开发(基于Socket等协议)
- 网络爬虫(为搜索引擎、深度学习等领域提供数据源)
- 数据分析
- 深度学习
科学计算
尽管这里没有列出Python的所有应用领域,但光这些列出的领域,就已经包含了绝大多数开发场景。用过Mac OS X或Linux的读者会发现,在这两个操作系统中,已经内置了Python解释器,也就是说,Python程序可以在Mac OS X和Linux上直接运行。所以很多运维工程师习惯使用Python来完成很多自动化操作。而且Python在操作网络、文本方面尤为突出。Google搜索引擎的第一个版本就是用Python写的。现在超级火热的深度学习也离不开Python,而且Python已经成为了深度学习的第一语言。因此,从各个角度来看,无论是学生、程序员,还是数据分析师,或是科学家,都离不开Python。Python俨然已经成为了编程语言领域的世界语。
### 1.3 如何学好Python
如何学好Python语言,是所有初学者需要共同面对的问题,其实每种编程语言的学习方法都大同小异。下面是给初学者的几点建议。
大体了解一下Python是一种怎样的编程语言,以及主要的应用领域。说白了,就是要了解Python能做什么,擅长做什么。对Python语言有一个宏观的认识。
- 搭建开发环境,不管三七二十一,先弄出一个Hello World再说(可以复制现有的代码)。这样会给自己带来继续学习下去的信心。我们可以设想,学了一个星期,如何连一行代码都写不出来,继续学下去的兴趣还会剩多少呢?
- 不要深究设计模式,这些东西是给那些有多年经验的程序员准备的,而且设计模式也不是用来学的,更不是用来记的,是依靠自己的多年经验和实践得出来的。这就像学英语,只管说就好了,管他什么语法,说多了,英语自然就纯正了。所以在一开始写程序时,只管写就好了,让设计模式见鬼去吧!
- 模仿书中的例子代码,一定要自己亲手写代码,当然,一开始为了看运行结果,可以将书中的例子直接复制过来,但一定要完全自己写一遍,代码可以与书中的例子不同,只要实现同样的功能即可。
- 在编写代码的过程中,不需要对Python语言的语法死记硬背,如果某些语法实在记不住,就把这些语法写在卡片上,或干脆放到有道云笔记上,以便随时查看,写多了自然就记住了。
- 初学者不需要大量阅读Python的书籍,也不需要在网上查阅过多的技术资料,因为在自己的功力还没有达到一定火候时,摄入太多的信息会分散自己的精力,可能会适得其反。用一句武林中的话说就是:走火入魔。因此,对于初学者来说, 应充分利用本书给出的代码多做练习,当学会了本书给出的各种知识和技巧后,就可以随心所欲地摄取任何自己想获得的知识了。
- 读者应充分利用随书赠送的Python视频课程,这套视频课程是与本书同步的。书与视频的差别就是书只能给出一个结果,而视频不仅可以给出结果,还可以详细演示操作过程,这对于初学者尤其重要。
- 在模仿书中例子编写代码的过程中,可能对有些代码没有理解透彻,这并不要紧,读者应仔细阅读本书的相关内容,以及利用随书赠送的Python视频课程反复观看,以便领悟其中的奥秘。如果实在领悟不了,也可以到极客起源IT问答社区(https://geekori.com )去提问,会有很多人回答你提出的问题。
- 本书配有大量练习题,读者可以通过这些练习题更好地掌握书和视频中的知识点,而且这些练习题不是生硬地给出,而是通过“过关斩将”、“测能力”等形式给出(这些功能需要依托欧瑞科技旗下“极客题库”小程序实现)。读者可以通过这些功能以闯关的方式完成自己的学习任务,并对自己的知识点掌握情况了如指掌。
- 经常总结是一个好习惯,这个习惯对于程序员来说尤其重要。读者可以经常把自己的学习心得,以及经常需要查阅的内容发布到博客(如https://geekori.com )上,这样不仅可以提高自己的技术能力,还可以提高自己的语言表达能力。
- 经常回答同行提出的技术问题也是一种提高技术能力的方式,而且更有效。如果你没有能力回答任何技术问题,或只能回答不到10%的技术问题,那么你还是个小白。如果能回答超过30%的技术问题,那么说明你已经至少达到了程序员的中级水平,如果这个比例是50%,那么恭喜,你已经成为该领域的高手了。如果提高到80%,会毫无悬念地成为该领域的专家。另外,欧瑞科技旗下的极客起源IT问答社区(https://geekori.com )包含了李宁老师大量学员和读者提出的各种问题,各位读者也可以试试自己到底属于哪个层次。另外,在https://geekori.com 中提问、回答问题以及撰写博客,都会获得可观的积分,可以换取更多的学习资源。
- 大量阅读源代码。如果前面的方法读者做的都很好,那么相信读者的技术水平已经有了一个质的飞跃,剩下来的工作就是更进一步地提高自己的技术能力。阅读各种开源项目的源代码是一个非常好的方式。另外,要注意,阅读源代码不是目的,目的是要理解这些源代码背后的原理,当然,最终的目的是自己可以实现一个类似的功能。读者可以到https://github.com 获取各种类型的Python源代码。
2 搭建Python开发环境
### 2.1 安装官方的Python运行环境
不管用什么工具开发Python程序,都必须安装Python的运行环境。由于Python是跨平台的,所以在安装之前,先要确定在哪一个操作系统平台上安装,目前最常用的是Windows、Mac OS X和Linux三大平台。由于目前使用Windows的人数最多,所以本书主要以Windows为主介绍Python运行环境的搭建与程序的开发。
读者可以直接到Python的官网下载相应操作系统平台的Python安装包。
https://www.python.org/downloads
进入下载页面,浏览器会根据不同的操作系统显示不同的Python安装包下载链接。如果读者使用的是Windows平台,会显示如下图所示的Python下载页面。
如果读者使用的是Mac OS X平台,会显示如下图所示的Python下载页面。
不管是哪个操作系统平台的下载页面,都会出现“Download Python 3.6.2”和“Download Python 2.7.13”两个按钮(随着时间的推移,可能版本号略有不同)。由于本书使用Python 3讲解,所以点击“Download Python3.6.2”按钮即可。如果是Windows平台,下载的是exe安装程序,如果是Mac OS X平台,下载的是pkg文件,这是Mac OS X上的安装程序,直接安装即可。
现在主要来说说在Windows平台如何安装Python运行环境。首先运行下载的exe文件,会显示如下图所示的Python安装界面。建议读者选中界面下方的“Add Python 3.6 to PATH”复选框,这样安装程序就会自动将Python的路径加到PATH环境变量中。
在该界面中出现两个安装选项,“Install Now”和“Customize installation”,一般点击“Install Now”即可,点击该选项后,会开始安装Python,下图是显示安装进度的界面,读者只需要耐心等待Python安装完即可。
安装完后,会出现下图所示的安装成功界面。
### 2.2 配置PATH环境变量
在安装完Python运行环境后,我们可以测试一下Python运行环境,不过如果在安装Python的过程中忘记了选中“Add Python 3.6 to PATH”复选框,那么默认情况下,Python安装程序是不会将Python安装目录添加到PATH环境变量的。这样一来,我们就无法在Windows命令行工具中的任何目录执行python命令了,必须进入Python的安装目录才可以使用python命令。
为了更方便地执行python命令,建议将Python安装目录添加到PATH环境变量中。在Windows平台配置PATH环境变量的步骤如下:
1. 回到Windows的桌面,鼠标右键“计算机”,在弹出菜单中单击 “属性”菜单项,会显示如下图所示的“系统”窗口。
点击“系统”窗口左侧的“高级系统设置”,会弹出如下图所示的“系统属性”窗口。
点击“系统属性”窗口下方的“环境变量(N)…”按钮,会弹出如下图所示的“环境变量”窗口。
在“环境变量”窗口有两个列表,上面的列表是为Windows当前登录用户设置环境变量,在这里设置的环境变量只对当前登录用户有效。下面的列表是对所有用户设置的环境变量,也就是说这些变量对所有的用户都有效。读者在哪里设置PATH环境变量都可以,本书在上面的列表中设置了PATH环境变量。如果在列表中没有PATH环境变量,点击“新建(N)…”按钮添加一个新的PATH环境变量。如果已经有了PATH环境变量,双击PATH,就会弹出“编辑用户变量”对话框。
读者需要在“变量值(V)”文本框中添加Python的安装目录,多个路径之间要用分号(;)分隔。那么我们怎么找到Python的安装路径呢?实际上,在Python安装界面的“Install Now”按钮下方就是Python的默认安装路径,这个路径可以修改,不过一般保持默认设置即可。如果仍然使用Python的默认安装路径,那么需要在PATH环境变量的最后添加如下的路径。
C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32
我们可以进入该路径,就会看到如下图所示的目录内容。很显然,我们要使用的就是目录中的python.exe文件。
现在打开Windows命令行工具,执行python –version命令,如果输出Python 3.6.2,说明Python安装成功了。
### 2.3 安装Anaconda Python开发环境
开发一个完整的Python应用,光使用Python本身提供的模块是远远不够的,因此,需要使用大量第三方的模块。在发布Python应用时安装这些第三方模块是一件令人头痛的事,不过有了Anaconda,让这件事轻松不少。Anaconda是一个集成的Python运行环境。除了包含Python本身的运行环境外,还集成了很多第三方模块,如本书后面要将的numpy、pandas、flask等模块都集成在了Anaconda中,也就是说,只要安装了Anaconda,这些模块都不需要安装了。
Anaconda的安装相当简单,首先进入Anaconda的下载页面,地址如下:
https://www.anaconda.com/download
Anaconda的下载页面也会根据用户当前使用的操作系统自动切换到相应的Anaconda安装包。Anaconda是跨平台的,支持Windows、Mac OS X和Linux。不管是哪个操作系统平台的安装包,下载直接安装即可。
Anaconda的安装包分为Python3.x和Python2.x两个版本,由于目前Python3.x最新版是Python3.6,而Python2.x最新版是Python2.7,所以习惯上称这两个版本为Python3.6版和Python2.7版,由于本书使用的是Python3.6,所以建议读者下载Python3.6版的Anaconda。下载界面如下图所示。下载完后,直接安装即可,如果安装完后,如果未设置Python的PATH环境变量,可以按上一节的方式进行设置。
### 2.4 安装PyCharm
PyCharm是一个专门用于开发Python程序的IDE,由JetBrains公司开发,这个公司开发出了很多非常流行的IDE,例如,WebStorm、Intellj IDEA等,其中Android Studio(开发Android App的IDE)就是基于Intellj IDEA社区版开发的。
PyCharm有两个版本:社区版和专业版。社区版是免费的,但功能有限,不过使用PyCharm编写本书的案例足够了。
读者可以到下面的PyCharm官网下载PyCharm的安装文件。
https://www.jetbrains.com/pycharm
尽管PyCharm下载页面后,将页面垂直滚动条滑动到中下部,会看到如下图所示的PyCharm专业版和社区版的下载按钮。
PyCharm下载页面会根据用户当前使用的操作系统自动切换到相应的安装文件,Windows是exe文件,Mac OS X是dmg文件,Linux是tar.gz文件。读者只需要点击右侧的“DOWNLOAD”按钮即可下载相应操作系统平台的安装程序。
下载完PyCharm后即可运行PyCharm,第1次运行PyCharm,会显示如下图所示的欢迎界面。点击“Create New Project”按钮即可建立Python工程。
2.5 配置PyCharm
现在点击PyCharm欢迎界面的“Create New Project”按钮会显示“New Project”窗口,这个窗口是用来创建Python工程的。在“Location“文本框中输入Python工程的名字,如果读者要选择不同的Python运行环境,可以点击“Project Interpreter”,会在“New Project”窗口下方显示如下图所示的Python运行环境选择界面。
如果读者已经配置好了PyCharm中的Python运行环境,从“Interpreter”列表中选择一个Python运行环境即可。如果读者还没有对PyCharm进行配置,需要点击“Interpreter”列表框右侧的按钮,然后在弹出菜单中点击“Add Local…”菜单项,会弹出如下图所示的“Add Local Python Interpreter”窗口。
选择左侧列表中的“Virtualenv Environment”,点击右侧“Interpreter”列表框右侧的省略号按钮,会弹出一个“Select Python Interpreter”窗口,如下图所示。在该窗口中选择Anaconda或其他Python解释器,然后点击“OK”按钮关闭该窗口。
接下来回到“New Project”窗口,在“Interpreter”列表中选择刚才指定的Python运行环境,最后点击“Create”按钮创建Python工程。一个空的Python工程如下图所示。
Python源代码文件可以放在Python工程的任何位置,通常会将Python源代码文件放在src目录中,然后选择src目录,在右键菜单中点击“New”>“Python File”菜单项创建一个Python文件(这里是Test.py),如下图所示。
第一次运行Python程序可以选择Test.py文件,然后在右键菜单中选择“Run ‘Test’”菜单项会运行Test.py脚本文件,以后再运行,可以直接点击MyCharm主界面右上角的绿色箭头按钮。现在为Test.py文件输入一行简单的代码,如print(‘hello world ‘),然后运行Test.py脚本文件,会得到如下图所示的输出结果。如果读者按前面的步骤进行,并得到这个输出结果,就说明PyCharm已经安装成功了。
### 2.6 Python中的REPL环境
- 1
- 2
Python有如下3种运行方式。
- 直接通过python命令运行
- 在Python IDE中运行
- 在Python的REPL环境中运行
本节将介绍如何在REPL环境中运行Python程序,这里的REPL是Read-Eval-Print Loop的缩写,是一个简单的交互式编程环境,也可以将Python REPL环境称为Python控制台。为了统一,本书后面的章节都称Python REPL为Python控制台。
读者只需要在Windows命令行工具中执行python命令,即可进入REPL环境。在命令提示符(>>>)后输入print(“hello world”),按回车键,就会在REPL环境中输出“hello world”,如下图所示。
如果在Windows下,按Ctrl+Z退出REPL环境,如果在Mac OS X,按Ctrl+D退出REPL环境。
1.3 第一个Python程序
本节会编写我们的第一个Python程序。这个程序定义了两个整数类型的变量n和m,并将两个变量相加,最后调用print函数输出这两个变量的和。
(1)读者可以使用任何一个文本编辑器、Eclipse或PyCharm创建demo.py文件,并输入下面的Python代码。
n = 20
m = 30
print("n + m =",n + m)
- 1
- 2
- 3
建议读者使用Eclipse或PyCharm来创建demo.dy文件,因为这样做可以直接在IDE中执行Python程序,并不需要像命令行方式运行Python程序那样在文本编辑器和Window命令行工具之间来回切换。
(2)运行Python程序
如果读者想在Windows命令行工具中运行demo1.py,可以在命令行工具中进入demo1.py所在的目录,然后执行下面的命令运行demo1.py。
python demo1.py
在命令行工具中运行demo1.py的输出结果如下图所示。
## 1.4 调试Python程序
在开发复杂的Python程序时,如果出现bug(也就是程序中出现的错误),就需要对程序进行调试,以便找出bug对应的代码行。调试程序的方法很多,例如,可以使用print函数在程序的不同位置输出相应的信息,以便缩小bug出现的范围。不过这种方法太原始了,现在普遍使用的方法是通过调试器一步步跟踪代码行,这种方式可以非常方便地找到bug所在的位置。
由于PyDev是Eclipse插件,所以调试Python程序可以使用与调试Java类似的方式(PyCharm的调试方法类似)。Eclipse提供了调试接口,后台调用了各种编程语言的调试器。在调试Python代码时会调用Python的调试器。
用Python调试器调试Python代码的步骤如下:
(1)设置断点
设置断点是调试程序的过程中必不可少的一步。Python调试器每次遇到断点时会将当前线程挂起,也就是暂停当前程序的运行。
可以在Python编辑器中显示代码行号的位置双击添加或删除当前行的断点,或者在当前行号的位置鼠标右键单击,会显示如下图所示的弹出菜单。在菜单中单击“Add Breakpoint”菜单项,会在当前代码行添加断点。也可以单击“Disable Breakpoint”菜单项,禁用当前行的断点。如果当前行已经有断点了,菜单中会出现“Remove Breakpoint”菜单项,单击该菜单项,会删除当前行的断点。
添加断点后的Python编辑器如下图所示。其中第2行设置了一个断点。
(2)以调试方式运行Python程序
在Eclipse中运行分为两种方式:Release和Debug,也就是发行和调试。如果只是观察程序的执行效果,可以选择Release方式,如果要调试程序,就需要使用Debug方式。
Debug按钮在Eclipse工具栏左侧,如图1-54所示(有一个小爬虫的按钮,在Release按钮的左侧)。
现在点击Debug按钮,就会运行Python程序,如果Python程序没有设置任何断点,Debug和Release方式运行的效果是一样的,都会输出运行结果。不过用Debug方式运行程序,Eclipse会进入Debug透视图(Perspective),这里的透视图就是Eclipse中将多个相关视图以一定位置和尺寸放到一起,便于开展工作。Debug透视图则是将与调试相关的视图放到一起,便于调试。
如果Python程序中有断点,当程序执行到断点处,就会暂停程序,并且在断点行用绿色背景展示,如下图所示。
(3)观察调试信息
调试的主要目的是将程序中的数据展现出来,也就是说,调试调的就是程序中的数据。因此,通过Python调试器,可以用多种方式观察Python程序中数据的变化。例如,由于n = 20在m = 30前面,所以在m = 30处中断后,n = 20肯定是已经执行了,所以可以将鼠标放到n = 20语句上,这时会在弹出窗口中显示变量n的数据类型和当前的值,如下图所示。
在右上角的Variables视图中也可以观察变量值的变化情况,如下图所示。
(4)跟踪调试程序
调试的另一个重要功能是可以一步步跟踪程序,也就是step into(单独跳入)和step over(单步跳过)。其中step into可以跟踪进函数内部,step over并不会跟踪进函数内部。这两个功能可以通过点击左上侧的两个按钮实现,如下图所示。
现在点击“step over”按钮,会发现Python代码区域m = 30代码行执行了,并且绿色背景跑到下一行了,如下图所示。
1.5 实战与练习
尝试修改1.3节的例子,使程序输出n * m的值。
尝试编写Python程序,分别用“*、+、-、/”四个在四则运算符将两行字符串包围起来,并Eclipse的Console视图中输出如下图所示的结果。
Python技能树,Get新技能