第1章 开始自学#

自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。 ——华罗庚

华罗庚

现在开始自学 Python !

自学,也要有充足的准备:第一,认识到自学对个人职业生涯的重要性;第二,要有一台计算机(虽然在手机上也可以编程,但目前不推荐),并能熟练操作——不仅仅是用鼠标点来点去,还要掌握 1.5 节所述的技能;第三,能熟练使用搜索引擎,且有搜索的意识,遇到疑问能首先想到搜索。这些准备,有的项目对部分读者或许具有挑战性,可能是自学中的难点。

1.1 必须自学#

自学,是成为一名优秀程序员的唯一途径,注意不是“途径之一”,而是“唯一途径”,舍此无他。

有幸遇到过很多优秀程序员,曾向他们请教有关个人发展的问题。这些青年才俊,毫无例外都谈到了“自学”。用不完全归纳法,可以认为优秀程序是“自学成才”的,或者说具有较强的自学能力。虽然此结论没有得到严格的证明,但它是多年的经验积累——人生经验不同于数学定理,通常难以证明。诚然,如果不认可,亦不能强求。

此外,我也接触了很多试图进入软件开发领域的初学者(多数是在校学生或者毕业不久者),总有一部分人希望老师“手把手”地教,希望老师讲解得更详细,希望老师把各种知识点总结好发给他,…… 。他们特别强调自己是初学者、自己是零基础。但他们忘记了,自己是成年人,是正在或者已经接受过大学教育的成年人。

收集了一些学习者的典型问题,可以通过下面的链接访问,供读者参考。有则改之,无则加勉。

https://lqlab.readthedocs.io/en/latest/their-learning.html

通常而言,程序员的职业生涯不是三年五载就结束了。姑且按照当前某些媒体热炒的“三十五岁”危机来计算(这是无稽之谈),从大学毕业到危机时期,也大约十年。这十年中,软件开发技术相较于在学校所学,肯定会有很大变化——更何况在学校内的课堂上所学是否匹配于工作实际,也是值得探讨的;这十年中,软件开发技术相较于职业生涯初期也肯定会有很大变化;这十年中,更可能是“不在学校学习,没有老师教”。那么,应该如何应对这十年的变化?毫无疑问,必须自学!自学各种新知识、新技术,甚至于自学老知识、老技术。

如果没有自学,别说“三十五岁危机”,二十五岁也不会安全。如果从业的十年,是自学的十年,所谓“三十五岁”危机,也就迎刃而解了。

其实,不仅仅程序员需要自学,其他行业的从业者也需要。

自学建议

为了能让自学坚持长久,可以将”可视化管理”应用到自学过程中。我提供了一张针对本书内容的自学管理表,读者可以借用它管理自学过程。

与本书配套的《自学管理表》下载地址:百度网盘:链接: https://pan.baidu.com/s/1yrRG4axCZZ5dEwl9TWP9Gw 提取码: jqjj

1.2 编程语言#

可以将语言分为两类,一类是自然地随文化演化的语言,称为自然语言(Natural Language),如汉语、英语、法语等;另一类是根据特定目的、用途,人为创造的语言,称为人造语言(或“人工语言”,Constructed Language)。编程语言(或“程序设计语言”,Programming Language)是用来定义计算机程序的形式语言,属于人造语言。

通常,编程语言可以划分为:

  • 机器语言

  • 汇编语言

  • 高级语言

1.2.1 机器语言#

机器语言(Machine Language)是用二进制代码( 01 )表示的计算机能够直接识别和执行的机器指令集合。如图1-2-1所示,就是用机器语言编写的表示字符串 "Hello World" 的程序(关于字符串,参阅第4章4.2节)。阅读它是不是很有挑战性?

图片

图1-2-1 "Hello World" 的二进制代码

机器语言的最大优势是运行速度快,但它的劣势也很明显,比如图1-2-2所示的代码,如果不仔细地分辨,难以发现与图1-2-1所示内容是否有差异。

图片

图1-2-2 有错误的 "Hello World" 二进制代码

曾有读者说,他一眼就看出了图1-2-1和图1-2-2的差别,此乃天赋异禀。但就普通人而言,显然,机器语言“不友好”。

又由于机器语言是计算机的设计生产者通过硬件结构赋予计算机的操作功能,所以,不同型号计算机的机器语言会有所差别。这就导致机器语言的通用性差。所以,除了少数专业人员之外,绝大多数程序员不需要学习机器语言。

1.2.2 汇编语言#

汇编语言(Assembly Language)是二进制代码的文本形式,使用便于记忆的书写格式表达机器语言指令。如图1-2-3所示,是一段在 X86 计算机、64 位 Linux 操作系统运行的汇编语言程序。即使不理解这段程序,也能看出来,相对于机器语言,对人的友好度已经有了很大提高。

图1-2-3 汇编语言示例

但是,汇编语言非常靠近机器语言,仍然是一条指令对应着一条机器指令,并且某种汇编语言只专用于某类计算机系统,不能在不同系统之间移植。

现在,汇编语言依然有用武之地,因为它有一些独特之处,比如目标程序占用内存少、运行效率高等。当然,享用这些优点的代价就是必须接受较慢的开发速度。

1.2.3 高级语言#

高级编程语言(或“高级语言”,High-level Programming Language)是面向人的编程语言—— It is for Humans ——这不是某一种语言,而是一类语言。一般我们把“机器语言”和“汇编语言”归类为“低级语言”,除此之外的都称为高级语言(如图1-2-4所示)

图1-2-4 编程语言分类

高级语言之“高级”的原因是使用了大量的英语单词,对开发者而言,更容易理解。最重要的,高级语言摆脱了“硬件的拖累”,不需要与机器语言的指令对应,借助操作系统实现了对硬件的抽象。即使开发者“对硬件一窍不通”,也能利用高级语言开发程序。

20世纪50年代,Fortran 语言发明,这是一种现在仍然使用的高级语言。至今,人类已经发明了好多种高级语言,它们各有千秋,而且这种不断产生新的编程语言的趋势还将持续下去。当然,也会有一些编程语言成为历史。维基百科上有一个词条,列出了当前已知的编程语言(https://en.wikipedia.org/wiki/List_of_programming_languages),建议读者浏览一番,从而体会编程语言的多样性。

自学建议

互联网是最大的参考资料库,为自学提供了应有尽有的资料。在自学过程中如果遇到不理解的概念、术语、名词等,都可以在互联网上找到相关解释说明。自学者,必善于搜索、勤于搜索。

现在可用的搜索引擎很多,比如 google.com 、bing.com 、sogou.com 、baidu.com 等(排名分先后,请读者自行体会),不同的搜索引擎有不同的擅长,请恰当使用。

1.3 程序#

计算机程序(Computer Program),也称为程序(Program),是一组指示计算机或其他具有信息处理能力的设备完成操作的指令集合。通常,程序是由某种编程语言编写而成。

程序编写出来之后,毫无疑问要在计算机上执行——俗称”跑“(run)起来。要达到这个目的,必须要让计算机能够“认识”程序,从而“知道”自己干什么。

如果程序是用机器语言编写的,那么计算机就能够直接“认识”了。如果程序是用高级语言编写的,要让计算机“认识”,必须先将程序“翻译”成机器语言。这与自然语言颇为类似。鲁迅在《阿Q正传》中写道:他却总说道 No!——这是洋话,你们不懂的。没有学过洋话的人要想听懂,必须要翻译。

对于程序而言,所使用的“翻译”方式有两种:编译和解释。在解释这两种方式之前,先了解几个常用术语:

  • 源代码:用某种高级语言写的程序就称为“源代码”。

  • 源文件:保存源代码的文件称为源文件。

  • 本地代码:计算机(具体就是 CPU)能直接执行的机器语言的程序。用任何编程语言编写的源代码,最后都要翻译为本地代码。

再简要说明两种“翻译”方式:

(1)编译

编译器(Complier ,也是一种程序)将源代码全部翻译为本地代码的过程,就是编译(Compile)。所谓编译器,则是执行这一过程的程序。

某些编程语言写的程序需要编译之后才能执行,这类语言常称为“编译型语言”,比如:C 语言。

(2)解释

有的程序,不需要编译,在运行它的时候,直接用解释器(Interpreter ,也是一种程序)对源代码进行解释(Interpretation)和执行。

同样,用于编写这类程序的编程语言,称为“解释型语言”,比如 BASIC 。

自学建议

自学并不是坦途,但“踏平坎坷成大道”。

在网站 www.itdiffer.com 中“有则改之”页面,记录很多学习者与我的交流和提问,特别建议读者认真阅读一番,辨别其中哪些是真正的“困难”,哪些是自己给自己故意设置的所谓“困难”——有则改之,无则加勉。

如果学习中遇到了真正的困难——没有电脑之类的困难不在此列——自己应该庆幸,因为这是进步的阶梯。面对困难,不要烦躁、恼火——气大伤身,且不解决问题,而是要理智地分析困难,利用搜索引擎和其他网站,搜索相关资料——务必要认真地、完整地阅读,切忌走马观花。再结合当前问题,通过反复操作尝试,尽力解决困难——通常这样做必然能“成大道”。

1.4 Python 语言#

在1.2节中已经简要介绍了编程语言,本书将要介绍的编程语言是一种名为 Python 的高级编程语言。为什么要学习这种编程语言,其解释是仁者见仁智者见智。先看看由 TIOBE 提供的2021年10月的编程语言排行榜(如图1-4-1所示,来源:https://www.tiobe.com/tiobe-index/ )。

图1-4-1 编程语言排行榜

从榜单可见,Python 语言位列第一名(2021年10月)。读者查看此排行榜的时候,结果可能会与图1-4-1所示不同,但无论如何,Python 语言在工程、教学等领域,都是颇受欢迎的编程语言。

既来之,则安之。已经阅读到这里了,哪怕就是道听途说“ Python 语言好”,也算是一个学习理由吧。更何况,从当前流行的编程语言趋势来看,Python 语言也日益成为“大众编程语言”——业已走入中小学的计算机教材之中。

一种“已过而立之年”的编程语言,缘何有如此魅力? 还要从“初心”开始谈起。

图1-4-2 Guido van Rossum
(源自:https://zh.wikipedia.org/wiki/Python)

Python 语言的发明人是吉多·范罗苏姆(Guido van Rossum)。关于他发明 Python 语言的过程有很多传奇地描写,例如在“维基百科”的中文词条“Python”中说他在圣诞节期间“为了打发时间,决心开发”此编程语言。这种写法无非是要表现非凡之人的非凡之处(类似于“是时雷电晦冥,……,则见蛟龙于其上。已而有身,遂产高祖”《史记·高祖本纪》)。

不论吉多的发明过程被描述得多么神奇,Python 语言终究是诞生了,它的主要特点和“初心”还被总结为《Zen of Python》(中文翻译为《 Python 之禅》)。下面列出英文和中文两个版本(中文翻译来自“维基百科”的“ Python 之禅”词条),读者可以对照阅读,从中初步了解 Python 语言的特点。在后续的学习过程中,还可以将所学 Python 语言知识与此处的诗句对照,感悟这些凝练的词语中所蕴含的深刻含义。

英文版

中文版

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren’t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one– and preferably only one –obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never.
Although never is often better than right now.
If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea – let’s do more of those!

优美优于丑陋,
明瞭优于隐晦;
简单优于复杂,
复杂优于凌乱,
扁平优于嵌套,
稀疏优于稠密,
可读性很重要!
即使实用比纯粹更优,
特例亦不可违背原则。
错误绝不能悄悄忽略,
除非它明确需要如此。
面对不确定性,拒绝妄加猜测。
任何问题应有一种,且最好只有一种,
显而易见的解决方法。
尽管这方法一开始并非如此直观,除非你是荷兰人。
做优于不做,
然而不假思索还不如不做。
很难解释的,必然是坏方法。
很好解释的,可能是好方法。
命名空间是个绝妙的主意,
我们应好好利用它。

现在的 Python 编程语言,由于遵循着“开源、开放”的原则,已经发展成为一个覆盖诸多领域的开放生态系统,例如在人工智能领域,每个深度学习框架都要发布“ Python 版”——这是标准配置。

下图是 PyPI 网站的首页( pypi.org ),这个网站专门发布开发者编写的 Python 第三方库(参阅第11章11.4节),至撰写这段内容为止,此网站上已经有 298,220 个项目(如图1-4-3所示,到第11章11.4节时,会看到此图的变化)。毫不夸张地说,PyPI 的第三方库几乎涵盖了常规开发的各个领域——需要开发什么,先来这里搜一下,看看有没有“轮子”。正是有如此庞大的生态系统,才让程序员用 Python 语言实现了“以人为本,节省开发者时间”的要求。

图1-4-3 PyPI 首页

自学建议

就学什么编程语言而言,历来有很多争论,当然也没有定论——大家更愿意争论。比如有的认为应该学“程序执行速度快”的编程语言,有的认为应该学“用途广泛的”的编程语言,有的认为应该学“开发速度快”的编程语言,还有的认为应该学“简单易学”的编程语言,等等。不一而足。

读者对此如何决断?是听大师们教诲?还是听同学们劝导?还是看网上的帖子?亦或随大流,看招聘网站上招聘信息的多寡?或者看自媒体上的宣扬?

“小马过河”是一个非常生动的故事,每个人都有自己的需要和境况。至于学习哪种编程语言,甚至于是否学习编程,都要结合自己的具体情况,独立思考,做出判断。而非人云亦云,更不能跟着感觉走。

顺便提醒,不要忘记,最“节省机器时间”“跑得快”的编程语言是机器语言。

1.5 操作系统#

本节不是全面介绍操作系统知识,是提醒读者从开发者的角度认识自己的操作系统——至少要能熟练使用一些命令完成常见操作。

首先要声明硬件设备,本书所演示的代码都是基于个人计算机( Personal Computer ,简称:PC,也翻译为:电脑、计算机,有的资料中亦称为“微机”),或许有的读者执着于要在手机或者其他移动智能终端设备上编写和调试程序,不是不可以—— Python 是跨平台的,但会与本书演示的内容有所差异,本书不兼顾非个人计算机。

就目前常见的计算机而言,其操作系统包括:Windows 、macOS 、Linux 。

1.5.1 Windows#

Windows 操作系统的全称是“ Microsoft Windows ”,翻译为“视窗操作系统”,是当前个人计算机上应用最广泛的操作系统(没有之一)。

经过中小学的计算机课程学习,读者一定能够比较熟练地用鼠标在图形化界面上点来点去地完成各种操作。这只是 Windows 提供的一种操作模式,除此之外,Windows 还支持通过命令完成操作。虽然这种操作很不直观,现在也不“大众化”,但是在编写和调试程序的时候,倒是很方便。因此,未来的开发者对此要熟悉。

首先,打开能够输入命令的窗口——俗称“ CMD 窗口”。以 Windows 10 为例,可以有多种方法打开这个窗口。例如:在“开始菜单”中找到“ Windows 系统”里面的“命令提示符”,如图1-5-1所示:

图1-5-1 开始菜单中的“命令提示符”

用鼠标点击此项,打开如同图1-5-2所示的窗口,观察此时窗口界面中闪动的光标,提示我们可以在这里输入命令。

图1-5-2 命令行输入窗口

另外一种打开“CMD 窗口”的方法是使用快捷键“ Win + R ”,如图1-5-3所示。

图1-5-3 快捷键 Win+R

在弹出的对话框中(如图1-5-4所示)输入“ cmd ”后点击“ OK ”(或者是“确定”)按钮,也可以呈现“ CMD 窗口”(如图1-5-2所示)。

图1-5-4 运行 cmd 命令

打开了“ CMD 窗口”之后,即可输入命令完成某项操作。有哪些命令?

微软公司在推出 Windows 操作系统之前有一个名为“ DOS ”的操作系统,曾经在20世纪80、90年代,广泛安装在 IBM PC 兼容机上,乃至于后来 Windows 操作系统,也有几个版本至少部分地以 DOS 操作系统为基础。在图1-5-2所示的界面中所输入的命令,基本上就继承自 DOS 操作系统的各种命令。表1-5-1是部分常用的命令。

表1-5-1 几个 DOS 命令

命令

说明

MD

创建子目录

CD

改变当前目录,进入到指定的目录

DIR

显示指定位置下的目录和文件(默认是当前位置)

TREE

显示目录结构

COPY

复制文件

REN

文件改名命令

DEL

刪除文件命令

DATE

查看日期命令

注意,在 Windows 中输入命令,不区分大小写。如图1-5-5所示,以显示当前位置的目录和文件为例,当输入了 DIR(或者 dir )之后,敲回车即可。

图1-5-5 DIR 命令和结果

由于对 Windows 命令的操作和说明已经超出了本书的范畴,请读者参考下述的【自学建议】,自行进行研究。

自学建议

在搜索引擎中搜索“ DOS 操作系统”等有关内容,了解这种”古老“的操作系统,特别是常用的命令。如果自己所用的计算机是 Windows 操作系统,按照本节的介绍,在“ CMD 窗口”中练习用命令完成一些基本操作,比如:进入到指定目录、查看目录中的文件。

请读者务必熟练掌握基本的命令——这是开发者的基本功,在后续内容中会经常用到。

1.5.2 Linux#

图1-5-6 Linux 吉祥物 Tux

Linux 是一种开源操作系统,它以 Unix 为基础,发明人是 Linus Torvalds(如图1-5-7所示)。这是一位令众多程序员膜拜的、为 IT 业做出卓越贡献的开发者,他除了发明 Linux 操作系统之外,还发明了一种源码管理系统 Git ,是目前广泛应用的源码管理工具。

图1-5-7 Linux 操作系统的发明人 Linus Torvalds

Linux 被认为是开源软件的典型案例,只要遵循 GNU 通用公共许可证( GPL ),任何个人和机构均可以自由地使用 Linux 的所有源代码,也可以自由地修改和再发布。由此,就诞生了很多基于 Linux 的操作系统,一般称它们是 Linux 发行版,比如应用于个人计算机的 Ubuntu 、Linux Mint ,应用于服务器的 Red Hat 、CentOS 等。还有一个知名度很高的移动终端操作系统 Android ,也是基于 Linux 内核。

图1-5-8所示为一种比较常用的 Linux 发行版 Ubuntu的桌面,它同样提供了“所见即所得”的视窗操作——只需要点鼠标。也有很多桌面应用软件供用户选择,比如办公套件 LibreOffice 、浏览器 Firefox 、图像编辑器 GIMP 等。可以说,在 Windows 系统中常用的应用软件,在 Linux 系统中都有功能类似的替代品——除了杀毒软件,因为 Linux 的安全性高、病毒较少,乃至于没有必要再安装专门的杀毒软件。

图1-5-8 Ubuntu桌面

或许在个人计算机上使用 Linux 操作系统的数量不多——在专业的开发者群体中比例可能会高一点,但是要论及服务器上运行着的操作系统,Linux 则有一统江湖的趋势。对于服务器上运行的操作系统,我们不特别在意它的视觉体验,更关心的是“安全性”、“可靠性”等性能,当然,价格也是必须考虑的——不要忘记,Linux 是开源的。另外一项重要因素是围绕 Linux 已经建立起了非常完善的基于服务器的应用生态系统,这也是开源带来的好处。

作为专业开发者,必须要掌握一些 Linux 系统的基础知识。各位读者多以专业开发者为发展目标。专业选手和业余选手对待操作系统的最大区别是前者以提高工作效率为重点。又由于专业人士经过了专业训练,于是他们更喜欢用各种命令完成操作——手指不离开键盘,比用鼠标“点来点去”效率高很多——这是多么酷的场景,让很多业余人士和外行“虽不明,但觉厉”。

其实,只要摒弃恐惧心理,经过适当的练习,人人都可以成为专业人士,正所谓“人皆可以为尧舜”。

以 Ubuntu 为例,通常使用快捷键组合“ Ctrl + Alt + T ”,即可打开终端(如图1-5-9所示),然后在终端输入命令,即可完成相应操作。

图1-5-9 Ubuntu 的终端

表1-5-2列出了几个常用的 Linux 命令,建议与表1-5-1中的 DOS 命令对比,了解它们的差异,并对其中部分 Linux 命令按照【自学建议】中的方法进行练习。

表1-5-2 几个常用的 Linux 命令

命令

说明

mkdir

创建子目录

cd

改变当前目录,进入到指定的目录

ls

显示指定位置下的目录和文件(默认是当前位置)

cp

复制文件

rm

刪除文件命令

cat

在显示器上查看文件内容

mv

移动文件或目录,还可以对其重命名

find

在给定位置按照条件进行搜索

shutdown

关闭计算机

特别提醒,在 Linux 中,区分命令名称字母的大小写,表1-5-2中所列命令,在使用中都要求小写字母。

自学建议

如果读者现在用的计算机是 Windows 操作系统,建议从以下方式中选择一种,在自己的计算机上安装 Ubuntu 操作系统,并力争将其作为开发和学习的主要环境,至少要有所体验。

方式1:卸载 Windows 操作系统后安装 Ubuntu 系统。特别是针对“老旧”计算机,运行 Windows 系统及应用软件,已经“慢吞吞”了,如果改为 Ubuntu 系统,立刻会实现“飞一般”的操作。除了卸载原有 Windows 操作系统之外,还可以在性能较好的计算机上安装双系统,开机时选择将要使用的操作系统。具体安装方法请参阅 Ubuntu 官方网站的安装指南(https://ubuntu.com/tutorials/install-ubuntu-desktop#1-overview)或者其他网络资料安装。

方式2:在计算机上安装虚拟机软件,比如 VMware 、VirtualBox ,然后在虚拟机上安装 Ubuntu系统。

方式3:由于 Linux 系统对开发者的友好性,Windows 10 操作系统已经支持内置的 Linux 子系统,可以参阅相关资料,开启并使用子系统。

读者若有计划在软件开发这个方向上有所深入,就不得不摆脱貌似简单实则低效的用鼠标“点来点去”的操作习惯,改为貌似复杂实则便捷高效的“命令行”。不论是1.5.1节的 DOS 命令,还是此处介绍的 Linux 命令,至少要熟悉一种。

1.5.3 macOS#

macOS 是美国苹果公司推出的操作系统(注意,历史上这个操作系统的名称有所变更,2011年及之前称为 Mac OS X ,2012年至2015年称 OS X ),主要用于其 Macintosh(简称 Mac)系列的个人计算机上。

macOS 具有非常友好的视窗操作界面,并且与硬件配合堪称天衣无缝(毕竟是同一家生产的),这赢得了大众的欢迎(只是价格不怎么亲民)。对于开发者而言,图形化操作当然是必须的。除此之外,前述的“手指不离开键盘”完成各种操作,在 macOS 中也能轻松实现,因为 macOS 是基于 Unix 的,它与 Linux 同宗同源,所以常用的 Linux 命令可以用在 macOS 上。

自学建议

如果读者现在使用的就是苹果公司生产的个人计算机,比如 MacBook Pro 等,那么就请打开 Launchpad(启动板),找到 Terminal(终端),打开之后,显示了输入命令的窗口,但这个窗口内的视觉效果不好,所以,多数人更喜欢另外一个名为 iTerm 2 的应用(如图1-5-10所示)。

图1-5-10 iTerm 2 窗口

如果读者尚未拥有此类计算机,也不用懊恼和羡慕,在认真学习了本书内容之后,特别是充分理解本书所倡导的“自学”,将来一定能够凭借个人能力拥有一台你喜欢的最好的计算机。

1.6 Python 官方网站#

关于 Python 编程语言最权威的资料当然来自其官方网站,因此,要对该网站有所了解。

网址:python.org

网站首页如图1-6-1所示,先注意观察网站的结构。在最醒目的 logo 之上有一行栏目(称为第一行):Python、PSF、Docs、PyPI、Jobs、Community ,并且用倒三角形的符号指示当前位置是“ Python ”。在 logo 之下还有一行栏目(称为第二行):About 、Downloads 、Documentation 、Community 、Success Stories 、News 、Events 。

图1-6-1 Python官网首页

本节将重点浏览第二行栏目中的部分内容,第一行栏目中的内容建议读者自行翻阅。

1.6.1 About#

将鼠标移动到“ About ”上面,暂不要点击,即可看到图1-6-2所示内容,这里以最简洁的语言概述了 Python 语言特点:Python is a programming language that lets you work more quickly and integrate your systems more effectively 。

图1-6-2 介绍 Python

再将将鼠标向下滑动到“ Applications ”,并点击,即打开网址为 https://www.python.org/about/apps/ 的页面,在这个页面中列举了 Python 语言的一些应用领域,以及 Python 对该领域所提供的各种支持(专用的模块、库等工具),以下所列各项皆来自此页面,借此可以初步了解 Python 的基本应用(第12章会演示部分应用示例)。

  • Web 开发框架,常用的有 Django 、Flask 等。

  • 科学计算库,这是 Python 的重要应用领域,如 SciPy 、Pandans 等。

  • 机器学习和深度学习库,比如 Scikit learn 、PyTorch 、TensorFlow 等。

  • 桌面 GUI 开发框架,如 Tkinter 、kivy 等。

  • 嵌入式应用开发框架,如 MicroPython 。

  • ERP 应用框架,如 Odoo、Tryton 。

“ About ”栏目下的其他项,建议自行查阅。

1.6.2 Downloads#

这个栏目中的内容将在1.7节中使用,所以请务必认真阅读。

把鼠标滑动到“ Downloads ”栏目上(不点击鼠标),会自动出现如图1-6-3所示的效果,显示“ Download for Mac OS X ”及下面的下载按钮和有关说明。但是,若读者亲自操作,所看到的很可能与图示不同,因为此处所显示的内容是网站根据访问者所用的操作系统,显示当前可下载的最新版本的 Python 安装程序。图1-6-3所显示的内容,即表示我在编写本书的时候,使用的是 macOS 操作系统(参阅1.5.3节),网站针对此操作系统,提供当前可下载的最新的 Python 版本是“ Python 3.9.4 ”。点击写有“ Python 3.9.4 ”字样的按钮,就可以下载此版本的 Python 安装程序。也就是说,读者如果按照本书建议进行学习,通过此操作能够下载到与自己所用操作系统相匹配的最新发布的 Python 安装程序(不一定是 Python 3.9.4 ,可能会高于此版本)。

图1-6-3 下载 Python 安装程序
  • All releases

当把鼠标滑动到“ Downlloads ”栏目的下拉菜单中的“ All releases ”,并点击之,会打开网址 https://www.python.org/downloads/ ,这里列出了所有已经发布的各个版本的 Python 安装程序,图1-6-4即为我在编写本书时从此页面上得到的截图,其中显示了不同状态下的 Python 版本。请读者特别关注 Python 2.7 ,这是 Python 2.x 的最高版,已经在2020年元旦停止支持(end-of-life),但是,这并不意味着此版本不可用。

图1-6-4 维护着的 Python 版本

Python 的版本可能会成为初学者的困扰,在1.7节会就此有比较完整的阐述。

  • Windows

如果在图1-6-3所示的下拉菜单中,进入“ Windows ”,即打开网址 https://www.python.org/downloads/windows/ ,显示所有针对 Windows 操作系统的各个版本的 Python 安装程序。图1-6-5是从此网页中获得的部分截图(读者打开此网址时,可能与截图显示的版本不同),其中显示了当前最新发布版本——包含 Python 3 和 Python 2 两类。对于 Python 3.9.4 版,在列表中显示了不同的安装程序文件,点击超级链接即可下载。其中的“ embeddable package ”表示压缩文件;“ installer ”表示安装程序的可执行文件;“ 32-bit ”和“ 64-bit ”表示适用于不同位操作系统。

图1-6-5 适用于 Windows 的 Python 各版本安装程序

自学建议

以 Windows 10 为例,右键点击“此电脑”,然后选择“属性”,即可看到图1-6-6所示窗口,从中可知:本计算机的“系统类型”是“64位操作系统,基于 x64 的处理器”,也就是此台计算机中的 Windows 10 即为64位操作系统。

图1-6-6 64位操作系统

如果你所用计算机比较陈旧,也可能上面运行的操作系统是32位的。所谓32位和64位,表示的是该计算机 CPU 一次能处理的最大位数。在安装应用程序的时候,要注意区分,以便能最大限度发挥计算机的计算能力。

  • Mac OS X

使用 macOS 操作系统的读者,自然要从图1-6-3所示的下拉菜单中进入“ Mac OS X ”项,打开 https://www.python.org/downloads/mac-osx/ ,该页面的部分截图如图1-6-7所示(此截图为读者编写本书时所见,与读者所见页面可能有异)。

./images/chapter1-6-06.png)

图1-6-7 适用于 macOS 的 Python 各版本安装程序

如果读者使用的是苹果公司生产的个人计算机,就必须要关注一条信息,2020年11月苹果公司发布了 M1 芯片,并用于 Mac 系列的个人计算机上,这标志着苹果公司已经着手将 CPU 从 Intel 公司的迁移到自行设计的芯片。Python 语言为了适应此变化,在发布的安装程序中,就兼顾了当前的两种 CPU 。以图1-6-7所示的 Python 3.9.4 为例,列表中的:

  • Download macOS 64-bit Intel installer:对应的是应用于 Intel 公司 CPU 的安装程序;

  • Download macOS 64-bit universal2 installer:对应的是应用于苹果公司自研 CPU 的安装程序(如图1-6-8所示,即为一款应用了苹果 M1 芯片的 MacBook Pro 计算机的“ Finder - About This Mac ”截图)。

图1-6-8 使用了苹果 M1 芯片的计算机
  • Source code

进入图1-6-3所示的“ Downloads ”下拉菜单“ Source code ”项,打开 https://www.python.org/downloads/source/ 网址(图1-6-9为编写本节时页面的部分截图),即可得到各个 Python 版本的源代码下载列表。

图1-6-9 Python 各版本源码

要源码有什么用?

在开发领域,经常听到一些人声称“他要阅读源码”,也会有不少人附和。而实际上不少人甚至不晓得从哪里能搞到源码。现在找到了 Python 源码了,至少可以有点“附和的信心”了。

读者可以已经注意到,在“ Downloads ”的下拉菜单中,没有看到针对 Linux 操作系统的安装程序,用 Ubuntu 的读者是不是有点迷惑,难道被区别对待了吗?非也。在1.7节会对此有详细阐述。

对于“ Downloads ”下拉菜单中的其他项不再逐个说明了,可以自行了解。

1.6.3 Documentation#

图1-6-10所示的是鼠标滑动到“ Documentation ”栏目的显示效果,在其下拉菜单中,对学习者而言,最重要也是最常用的就是“ Docs ”项,它是本书——也是所有关于 Python 语言的图书——的唯一权威参考资料,其他各项是为开发者、学习者提供的有关资料,读者可以参考。

图1-6-10 Documentation 栏目及其下拉菜单

在图1-6-10所示的菜单中点击“ Docs ”,即打开网址 https://www.python.org/doc/ ,可以根据 Python 的版本查看到相应的文档。后面还有其他四个栏目,请读者自行查看,此处不再赘述。

对 Python 官方网站有了基本了解之后,就开始尝试在自己的计算机上配置 Python 开发环境。

自学建议

学习编程语言,肯定离不开英语,刚刚浏览过的 Python 官网网站,就是英语为主要语言。作为一名理性的、有追求的读者,肯定不会因为语言问题而对本书或者 Python 语言给予某种偏激的评论。

就编程语言中的英文而言,通常语法难度不高,或许会有个别单词不认识,凭借翻译工具也能很快理解。就此,向读者提供如下参考方案:

  • 建立信心,破除恐惧。阅读本书的读者,至少在初中、高中、大学中的两个阶段学过英语,很可能不少人通过了大学四级或者六级英语考试。凭此基础,足以阅读学习中所遇到的英文资料。之所以还觉得困难,是因为首次接触,对其中的表达规律尚未掌握,或者某些词汇还感陌生而已。

  • 水滴石穿,坚持不懈。在“完全自学”的学习进程中,不得不经常阅读英文资料,可以用翻译工具帮助理解个别词汇,但是不建议全文翻译,而是要坚持阅读原文。开始可能慢,只要“硬着头皮”坚持,光明的未来就属于你了。

最后,要郑重声明:本书中会引用很多来自 Python 官网或者帮助文档的内容,对于这些内容,也不会进行逐字逐句的翻译。若因此引起读者不适,本作者不对此负责。

1.7 安装 Python#

由上一节对 Python 官方网站的浏览可知,可以从网站上下载适用于各种操作系统的 Python 安装程序。只有在计算机上安装了从官方网站下载的对应安装程序(特别声明,此处强调:“从官方网站下载”),才能在那台计算机上使用 Python 编程语言编写程序,这就是常说的“配置开发环境”。

注意事项:

有的人不记忆网址,习惯于在搜索引擎上搜索。但是,根据经验,必要的或者重要的网址还是应当记忆的,比如 Python 官方网站的地址:python.org。这是因为,有的搜索引擎从自己的利益出发,并不会在比较靠前的搜索结果中显示官方网站,甚至可能将用户引导至其他网站,下载经过“做手脚”的安装程序。

1.7.1 Python 的版本#

在浏览1.6.2节有关内容的时候,特别是图1-6-4,显示了 Python 语言目前的两大版本:Python 2 和 Python 3 。这两个大版本有比较明显的差别,并且互不兼容——用 Python 2 编写的程序,无法用 Python 3 直接运行,反之亦然。至于两者的差异到底在哪里?不是本书重点阐述的内容。在学习编程语言上,我们秉承着“喜新厌旧”的原则,因为新版本会相对旧版本在语法、性能等方面有所改善。所以,编程语言无所谓“经典永流传”,总是“长江后浪推前浪,一辈新人胜旧人”。

故,建议学习 Python 3 。

但是 Python 3 还有那么多小版本呢,那就选择最新发布的。本书演示所用的是 Python 3.9.4 ,如果读者使用的是其他小版本——统称为 Python 3.x.y ,也均适用于本书的学习要求。也就是说,只要在 Python 3 这个大版本范畴内,各个小版本之间的差异不很大,对于初学者而言,甚至可以忽略——不可忽略的部分,会在书中提醒。

当读者学成之后,在实际项目中如果遇到了 Python 2 ——处理古老的代码,也是开发者经常要遇到的工作内容。怎么办?不必惶恐!若读者严格遵循本书要求,勤学苦练,到那时已经练就了处理各种难题的能力,现在不必杞人忧天,只需痛下决心,学起来。

最后总结,推荐使用的 Python 版本是在官方网站所看到的 Python 3 最新正式发布版本,即执行了1.6.2节中图1-6-3所示的操作后看到的最新发布版。如果未来有了 Python 4,则另当别论。

选定了 Python 版本之后,如何在计算机上安装?基本方式与安装其他软件类似。

1.7.2 Windows#

此处以 Windows 10 作为演示用操作系统,其他型号的 Windows 操作系统与这里演示的过程大同小异。

首先,从 Python 官方网站下载安装程序,如1.6.2节图1-6-5所示,点击图示的下载列表中“ Python 3.9.4 ”下的“ Download Windows installer(64-bit) ”下载该程序(由于此网站服务器在国外,国内有些地区下载速度可能会稍慢,请耐心等待。若遇到连接超时等情况而下载失败,请自行更换网络多次尝试)。

下载完成,在本地能够看到一个名为 python-3.9.4-amd64.exe 的文件(如果读者下载其它版本的安装程序,同样会显示带有版本号的文件),然后开始安装。

  1. 双击已经下载的安装文件,显示如图1-7-1所示的窗口,开始安装。

    1

    图1-7-1 开始安装

    注意,当看到图1-7-1所示界面时,不要贸然点击“ Install Now ”,而是要先将下面的复选框“ Add Python 3.9 to PATH ”选上(如图1-7-2所示),这样就意味着此时安装的 Python 程序会自动增加到系统的环境变量中。

    2

    图1-7-2 增选复选框

    然后点击图1-7-2所示的“ Customize installation ”(自定义安装),进入到下一步。

  2. 图1-7-3是点击“ Customize installation ”后的显示界面,现在可以自定义安装的项目,一般情况建议选中所有项目,除非读者有特别需要或者有能力后期安装有关项目。

    3

    图1-7-3 自定义安装项目

    然后点击“ Next ”按钮。

  3. 承接上一步,进入“ Advanced Options ”界面(如图1-7-4所示)。

    4

    图1-7-4 高级选项

    在此建议读者按照图1-7-5所示选中几个项目,并且要牢记程序的安装位置(可以自行指定,本示例的安装路径是:C:\Program Files\Python39)。

    5

    图1-7-5 选中的高级选项

    然后点击“ Install ”按钮。

  4. 安装过程大概需要几分钟(如图1-7-6所示)。

    6

    图1-7-6 安装过程

    如果幸运,会顺顺利利地完成安装,并最终出现图1-7-7所示结果:安装成功。然后点击“ Close ”按钮。

    7

    图1-7-7 安装成功

    但是,由于计算机系统的环境复杂,如果没有出现图1-7-7所示效果,或者安装中途出现某种错误等,都不稀奇,亦不要为此绝望,这些都是正常情况——“古来贤俊多坎坷”,代码人生就是在克服困难中成长。常用的解决方法就是利用搜索引擎,查找针对所出现错误的解决方法。

  5. 不论是一帆风顺,还是历尽千辛万苦,最终安装成功了,就可以在安装目录(前面提示要牢记的目录)中看到图1-7-8所示的内容。

    9

    图1-7-8 Python39 目录内容

    打开其中的子目录“ Scripts ”,显示的内容如果是图1-7-9所示的文件列表,说明按照前述过程操作后,已经将 pip 这个重要工具已经安装上了,这就为第11章11.4节的学习奠定了基础,否则那时还要遇到点麻烦。

    10

    图1-7-9 pip 工具文件

    打开图1-7-8中的子目录“ Doc ”,如图1-7-10所示,此处显示的文件 python394.chm 即为当前所安装的 Python 3.9.4 的文档,其内容与1.6.3节所看到的在线文档相当。

    11

    图1-7-10 安装在本地的文档
  6. 在说明图1-7-2所示的操作时,特别提醒要将“ Add Python 3.9 to PATH ”项选中,如果当时没有按照建议操作,下面还有补救机会;如果选了,也建议按照下面的流程了解操作效果。在计算机的桌面或者开始菜单中找到“此电脑”,单击鼠标右键(图1-7-11是开始菜单中的”此电脑“),选择“属性”,进入图1-7-12所示的界面。

    图1-7-11 Windows 10 开始菜单的“此电脑”

    图1-7-12 高级系统设置

    点击图中的“高级系统设置”,进入图1-7-13所示界面,点击其中的“环境变量(N)”按钮,打开图1-7-14所示的界面。

    15

    图1-7-13 环境变量

    17

    图1-7-14 编辑系统变量的 Path

    在图1-7-14中,选中“系统变量”中的“ Path ”,并点击“编辑”按钮,显示图1-7-15界面,从中看到已经添加的环境变量“ C:\Program Files\Python39\”和“C:\Program Files\Python39\Scripts\ ”——这就是执行了图1-7-2所示操作的效果,如果没有看到这两个环境变量,可以点击其中的“新建”按钮,将这两个路径添加到环境变量。

    18

    图1-7-15 查看和新建环境变量

经过上述操作,在计算机中已经配置好了 Python 环境。如果要检查一下是否成功,可以用下面两种途径启动 Python 交互模式——第2章开始会经常使用“ Python 交互模式”。

途径一,从“开始”菜单中找到刚刚安装的 Python 程序,如图1-7-16所示,点击其中的“ IDLE(Python 3.9 64-bit) ”,即可显示图1-7-17所示的界面。

图1-7-16 “开始”菜单中的 Python

13

图1-7-17 IDLE 的交互模式界面

途径二,按照1.5.1节所述,进入到“ CMD 窗口”(如图1-5-2所示的界面),不论当前位置在哪个目录,都可以输入 python ,并敲回车键,显示如图1-7-18所示的界面,也意味着进入到了 Python 交互模式中。

19

图1-7-18 在 CMD 窗口进入交互模式

1.7.3 Linux#

在1.5.2节中以 Ubuntu 为例简介了 Linux ,此处继续以其为例,演示如何在它上面安装和运行 Python 。

以下演示所用的是 Ubuntu 20.04 。

Ubuntu 操作系统的最大特点是不需要单独安装 Python ,只要此操作系统在计算机上安装好了,Python 开发环境作为默认的配置项已经安装好,正所谓“开箱即用”。打开1.5.2节中的图1-5-9所示的终端,直接输入 python3 指令并回车(注意输入的内容),显示效果图1-7-19所示,从图示中可以看到 Ubuntu 20.04 中默认支持的 Python 3.8.5 。不同版本 Ubuntu 系统中默认安装的 Python 版本会有差异,在使用的时候要注意分辨。

图1-7-19 Ubuntu 默认的 Python

不论所使用的是什么版本的 Ubuntu 操作系统,都可以将其中的 Python 环境进行重新配置。下面演示两种更新 Python 版本的方法,即满足“求新求变”的愿望,也能训练使用 Linux 命令配置开发环境的能力。

方法1:用 apt 安装

apt 的全称是“ Advanced Packaging Tool ”,是 Linux 系统下的一款安装包管理工具。在 Ubuntu 的终端中(如图1-5-9所示,注意不是图1-7-19所示的 Python 交互模式。在图1-7-19的交互模式中输入exit(),并敲回车,就回到了图1-5-9所示的状态)输入如下指令,目的是更新当前系统的软件并安装一个组件 software-properties-common

sudo apt update
sudo apt install software-properties-common

Ubuntu 自带软件源的 Python 版本不是我们所要求的——当读者阅读本书的时候,也可能自带软件源的版本已经更新到此处演示的 Python3.9.4 ,但那时 Python 也有更新的版本了,此法依然适用,只是版本号要修改。

为了安装最新发布的 Python,需要增加一个软件源,下面增加的是由第三方维护的软件源“ deadsnakes ”(https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa),到编写本节内容为止,此软件源的 Python 版本更新到了 Python 3.9.4 。继续在终端输入如下指令,为 Ubuntu 增加一个软件源。

sudo add-apt-repository ppa:deadsnakes/ppa

在执行上述指令的过程中,会出现提示,敲击“回车”键即可。

然后用下面的指令安装指定版本的 Python 。

sudo apt install python3.9

图1-7-20是上述指令的执行过程截图。

图1-7-20 Python3.9 安装过程

如果一帆风顺,就意味着 Python 3.9.4 已经在此 Ubuntu 系统上安装好了,按照如图1-7-21所示的方式,可以进入到交互模式——注意,如果使用python还不能进入到图示的交互模式,这是因为 Ubuntu 的软连接还没有修改。

图1-7-21 Python3.9.4 的交互模式

方法2:用源码安装

打开 Ubuntu 的终端之后,首先要对已有软件进行升级,并安装 Python 环境所需要的依赖项。

sudo apt update
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget libbz2-dev

然后从1.6.2节的图1-6-9显示的源码列表中下载 Python 源码。下面的指令是从 https://www.python.org/ftp/python/3.9.4/Python-3.9.4.tgz 下载源码的压缩文档,并保存在当前目录中。

wget https://www.python.org/ftp/python/3.9.4/Python-3.9.4.tgz

下载完成后,从下载的压缩包中提取存档文件。

tar -xf Python-3.9.4.tgz

而后在当前目录中即出现名为“ Python-3.9.4 ”的子目录,进入此子目录:

cd Python-3.9.4

然后执行:

sudo ./configure --prefix=/usr/python

这样就规定了即将安装的 Python 3.9.4 的目录。然后执行:

make -j 12

开始编译 Python 3.9.4 。上述命令中的参数-j表示并行编译,数字12表示允许同时执行的编译命令的数量。这个命令之后,终端会显得非常“繁忙”,要耐心地等待一段时间。完成之后执行:

sudo make altinstall

完成安装过程。但是,此时的 Python 3.9.4 只能进入到/usr/python/bin/目录执行才能有效,为了能够实现在任何地方只要键入命令python,就能执行 Python 3.9.4 ,还必须重新设置软连接。

sudo ln -s /usr/python/bin/python3.9 /usr/bin/python
sudo ln -s /usr/python/bin/pip3.9 /usr/bin/pip

这也是解决图1-7-21所示问题(如何不必输入 python3.9 )的方法。此后,不论在什么位置,只要执行python,即可启动 Python 3.9.4(如图1-7-22所示)。

image-20210422175034401

图1-7-22 在 Ubuntu 中启用 Python 3.9.4

1.7.4 macOS#

根据1.6.2节的内容可知,Python 官方网站提供了针对 macOS 的安装程序(如图1-6-7所示)——特别提醒,下载安装程序之前要知道本地计算机所采用的芯片型号。

下载了安装程序之后,与安装其他应用类似,双击安装文件(本示例是“ python-3.9.4-macosx10.9.pkg ”),显示图1-7-23所示窗口,点击“ Continue ”按钮开始安装。

image-20210423095507351

图1-7-23 开始安装 Python

随后就是继续“ Continue ”,直到最后安装成功(如图1-7-25所示)——如果遇到异常现象而未能正常安装,请参阅本节的【自学建议】。

image-20210423100244756

图1-7-24 正在安装

image-20210423100352493

图1-7-25 安装成功

打开 Launchpad(启动板),会看到如图1-7-26所示的 IDLE 应用,点击它,即可进入与图1-7-17雷同的界面。

image-20210423102536419

图1-7-26 IDLE

当然,通常专业人员很少使用上面的方法,一般是打开终端——常用的是 iTerm-2 ,输入命令 python启动交互模式(如图1-7-27所示)

image-20210423105309450

图1-7-27 在 iTerm-2 中进入交互模式

至此,不论读者使用任何操作系统,都应该已经安装好 Python 编程语言的最基本开发环境了——这里没有介绍在移动终端如何配置此环境,至少到本书编写之时,移动终端尚不是作为软件开发的主流设备。

接下里,是不是就可以开始学习编写程序了呢?可以了。有的资料就是基于前面所介绍的 IDLE 面向初学者讲授的。但是,我不准备那样做,因为有志于自学的读者将来必会鹏程万里,那么起飞的装备就不能是“玩具”,而是要专业的。

自学建议

任何人在任何操作系统中安装软件(或应用),都有可能遇到不顺利。这主要是因为每个人所用的计算机由于一直在执行各种操作,安装、卸载、删除、移动、复制等,难免会导致操作系统的标准配置发生变化,又恰逢所安装的软件对此敏感,故而安装失败。

如果万一遇到了“安装失败”,不要烦躁、气馁,任何不理智的、情绪化的行为只能导致心情更糟,计算机不会因为“怕惹你生气”而不“报错”。以下经验,请读者参考:

经验一:认真阅读提示信息。这需要读者气定神闲、不烦躁,从提示信息中了解失败的原因。

经验二:使用1.2节自学建议中提到的搜索引擎,耐心地到网上搜索解决方案——“日光之下并无新事”,你所遇到的,其他人已经解决,并很大方地把方案放到网上,但需要你亲自动手去找一找。

经验三:对网上提供的解决方案,要认真阅读,并与自己所遇到的情况进行比较,判断其是否适用。如果是一种可能的方案,必须要勇敢地动手尝试——尝试过程中要牢记自己的所有操作,甚至于做笔记,这样就能逐步提升自己解决实际问题的能力了。

“人非生而知之者,孰能无惑”,互联网是解决自学者之“惑”的最佳选择,无他。请抛弃“我是初学者,所以我不会”的心理(这与“我弱我有理”、“不跟我玩我就哭”有相通之处)。

诚然,除了上述方法之外,还可以到学习群里问一问。本书的学习讨论群已经发布到本网站上;亦或请教身边的高人。

1.8 IDE 简介#

所谓 IDE ,全称是 Integrated Development Environment ,或者 Integration Design Environment、Integration Debugging Environment ,中文翻译为“集成开发环境”。一般来讲,它跟编程语言无关。“维基百科”的“集成开发环境”词条,对 IDE 如此解释:集成开发环境( IDE )是一种软件应用程序,为开发者提供软件开发所需的代码编写、自动化构建和调试等功能。

很早的程序是不需要用 IDE 开发的,因为那时是通过打孔卡给计算机编程(如图1-8-1所示)。

img

图1-8-1 IBM 的80列标准打孔卡
图片源自“维基百科”的“打孔卡”词条

1964年发明的 BASIC 编程语言是第一个有 IDE 的编程语言,只是那时的 IDE 是命令行界面( Command-Line Interface,CLI ),类似的 IDE 现在仍然存在,比如 Vim 和 Emacs 。如今流行的 IDE 多是图形用户界面( Graphical User Interface,GUI ),比如 Visual Studio Code、Eclipse 等。

一款适合的 IDE 能够提升开发者的生产力,将开发工作的各个环节密切地整合起来,例如编辑代码同时检查语法错误、代码自动补全;将源码管理工具(比如 Git )融入到 IDE 等。

不同的开发者有不同的偏好,不同的项目有不同的需要,因此,一般而言没有哪一个 IDE 能够“一统江湖”,尽管有的 IDE 号称“普遍适用于”各种场景,也只能是在某个领域或者文化范围中的应用比例相对较高罢了。

即使是维基百科对 IDE 的描述也并非是严格定义,或者说现在很难用一个严谨的标准来判定某款编辑代码的软件程序是或者不是 IDE,也没有必要为此而争论——除非要做一个针对此概念的“科研课题”。所以,接下来所介绍的几种可以用来编写代码的应用程序,并非所有人都认为是 IDE ,我没有兴趣对此进行严格的辨析,读者如果认为将它们放在“ IDE ”之下不适合,就权当是介绍几个与编程有关的工具软件吧。

1.8.1 Vim#

Vim 是一个文本编辑器,它是从另外一个名为 vi( visual 的不正规缩写)的文本编辑器发展而来,最初的作者是布拉姆·米勒( Bram Moolenaar )。1991年11月份发布了初始版本——此时 Vim 是 Vi IMitation 的简称。后来,被移植到 UNIX 和 MS-DOS 上——其全称又变成了 Vi IMproved 。自此之后,Vim 就跟 UNIX 形影不离,乃至于此后发展出来的 Linux 上,Vim 也是标配的文本编辑器。

随着时代的发展,Vim 也在不断增加新功能,比如 Vim 4.0 开始实现 GUI ,Vim 5.0 实现了语法高亮,Vim 6.0 增加了代码折叠、分割视窗等,Vim 7.0 有了拼写检查、代码自动补全,编写本书时的最新版 Vim 8.2 ,有了更丰富的插件。在依然保持“小巧”的情况下,越来越向 Emacs 靠近(参阅1.8.2节),可以说 Vim 8.x 已经“现代化”了(如图1-8-2所示)。

图1-8-2 Vim 8.0 界面

Vim 很受 Python 开发者欢迎——更准确地说是早期的 Python 开发者,此间原因未加探讨,有兴趣者可以分析。

如果使用 Vim ,可以到其官方网站 vim.org 下载与操作系统匹配的安装程序(如图1-8-3所示)。

image-20210423161823996

图1-8-3 Vim 下载界面部分截图

在 Vim 官方网站的首页,有一幅有意思的漫画,摘抄于此(如图1-8-4所示)。

Emaks-Vim-Notepad comic

图1-8-4 关于 Vim 漫画

漫画中,第一幅图就指出 Emacs 虽然功能强悍,但是“太重了”;第二幅图则指出 Vi 是一个奇怪的家伙——不符合人体工学的要求;最好的就是 Vim :短小精悍,还免费。

在开发者中,也流传着很多关于 Vim 和 Emacs 逸闻趣事。

1.8.2 Emacs#

严格地说,Emacs 不是一个编辑器,而是一个编辑器家族。它自诞生以来,演化出了众多分支,比如 GNU Emacs、XEmacs ,而且在这两个分支基础上还有更多变种。

Emacs 的拥趸常说它“像个操作系统”,这是因为 Emacs 除了具有文本编辑和其他编程常用的功能之外,还有这些(以下所列仅仅是部分,内容参考“维基百科”的“ Emacs ”词条):

  • 收发电子邮件、新闻组

  • 登录远程主机

  • 访问 Twitter

  • 编辑电子表格

  • 模拟其他编辑器,如 vi、WordStar、EDT、TPU 等

  • 编辑维基百科

  • 计算器

  • 记笔记、日记

  • 管理日程

  • 浏览网站

等等。

当然,每个功能都由插件实现。通过此列表,就可以理解图1-8-4中第一幅的含义了。Emacs “像个操作系统”,的确“太重了”。但是,这并不能挡住拥趸们的狂热,冒昧揣测,或许是出身高贵——1970年诞生于 MIT 人工智能实验室。若要体验 Emacs 的强悍,可以到官方网站 https://www.gnu.org/software/emacs/ 下载最新版本(如图1-8-5所示)

image-20210423173141941

图1-8-5 Emacs 下载页面部分截图

已经了解 Vim 和 Emacs ,应该如何选用?不要着急做出决策,再看一幅令人不寒而栗的“学习曲线图”。图1-8-6是网络上流传的这两款编辑器的学习曲线图对比:

  • Vim ,起步就是山顶,但是后面一马平川。这意味着只要入门,以后轻松——只是入门的门槛高。

  • Emacs ,可以“零基础”起步,但要不停地“自我内卷”——用到老,学到老。

img

图1-8-6 学习曲线对比

所以,流传着这样说法:Vim 是“编辑器之神”——精悍、高效,Linux 必备;Emacs 是“神的编辑器”——“凡人”不能熟练应用所有功能。

对于这两款编辑器,如果读者望而生畏,也不为过。是否尝试,请自己决断。

自学建议

此处抄录王安石的散文《游褒禅山记》的部分内容:

夫夷以近,则游者众;险以远,则至者少。而世之奇伟、瑰怪,非常之观,常在于险远,而人之所罕至焉,故非有志者不能至也。有志矣,不随以止也,然力不足者,亦不能至也。有志与力,而又不随以怠,至于幽暗昏惑而无物以相之,亦不能至也。然力足以至焉,于人为可讥,而在己为有悔;尽吾志也而不能至者,可以无悔矣,其孰能讥之乎?此余之所得也!

1.8.3 其他#

除了 Vim 和 Emacs 之外的代码编辑器,都归类到本节,也有人认为它们才是真正的或狭义的 IDE 。这类 IDE 都是 GUI 类型,并且基本操作方法雷同——用“鼠标+菜单”能完成所有操作。

1. Visual Studio Code

Visual Studio Code(简称:VS Code )是微软出品的免费代码编辑器,默认支持 JavaScript、TypeScript、CSS 和 HTML,通过下载扩展插件支持 Python、C/C++、Java 等多种编程语言,还具有语法高亮、代码自动补全、代码折叠等常用功能。

VS Code 的官方网站是:https://code.visualstudio.com/ ,可以根据自己的操作系统下载相应安装程序,图1-8-7所示的是其编辑界面。

image-20210424140901715

图1-8-7 VS Code 界面

VS Code 的诱人之处在于任何人都可以开发扩展,并且背靠微软的大树,颇受开发者欢迎(2019年 Stack Overflow 调查显示,在87317的受访者中有50.7%的声称正在使用 VS Code ),安装了 VS Code 之后,可以在 https://marketplace.visualstudio.com/VSCode 查看所需扩展,或者在 VS Code 内部进行搜索,如图1-8-8所示,确认本地计算机已经连接到国际互联网,根据需要,点击“ Install ”按钮即可安装该项。

image-20210424142957643

图1-8-8 搜索 Python 语言的扩展

2. PyCharm

有一家捷克软件公司(特别声明:本书作者与此公司无任何利益关系),它生产了很多面向开发者的工具:

  • IntelliJ IDEA:Java 语言的 IDE;

  • GoLand:Go 语言的 IDE;

  • AppCode:Swfit 和 Objective-C 的 IDE;

  • RubyMine:Ruby 的 IDE;

  • PyCharm:Python 的 IDE;

  • ……

PyCharm 就是 JetBrains 公司研发的主要用于 Python 语言的 IDE,它具有 Windows、macOS 和 Linux 版本,并且发行有社区版和专业版。除了具有常规 IDE 的功能,如:代码分析、程序调试等之外, PyCharm 还特别对 Django、Flask 等常用的 Python 网络开发框架给予支持。

PyCharm 官方网站是 https://www.jetbrains.com/pycharm/ ,读者可以根据自己的需要至此下载。

3. Jupyter

很多人并不将 Jupyter 视为 IDE,特别是做软件开发工作的程序员,他们往往依据 Eclipse(一款 IDE 软件) 或 VS Code 等来判断别人家的是不是 IDE 。然而,在如火如荼的数据科学领域,Jupyter 是最受欢迎的代码编辑工具——从狭义的角度讲,可以加上“之一”。

Jupyter 是一个基于 Web 的交互式计算环境,当创建一个 Jupyter Notebook 文档(简称: Notebook,以.ipynb为扩展名)后,即可在其中编写程序代码,并基于浏览器运行代码和返回运行结果。

目前,Jupyter 官方网站 https://jupyter.org/ 提供针对各种常用操作系统的安装程序,以及对应的安装方法、使用文档等。图1-8-9所示为已经运行并创建了Jupyter Notebook 文档后的效果。

image-20210425092417446

图1-8-9 Jupyter Notebook 截图

如果读者想深入了解 Jupyter 在数据科学中应用,可以参阅第12章12.4节示例内容,更完整的学习内容则请阅读拙作《跟老齐学Python:数据分析》(电子工业出版社出版)。

4. Anaconda

Anaconda 是另外一款在数据科学中常用的软件程序,其官方网站是 https://www.anaconda.com/ ,关于它的详细内容,读者可以自行浏览网页,此处不进行介绍。

自学建议

阅读了本节内容之后,读者对 IDE 有了初步了解,就要至少选择并安装一种代码编辑软件。

有的学习者喜欢在这方面花费较大的精力,追求“大而全”、“完全自动化”、“最先进”、“更多绚烂技法”等,看到或听到某种新奇的功能,也总想在 IDE 上实现。

至少对于初学者,我不赞成如上追求和做法。要认识到,IDE 终究只是写代码的工具,不能代替代码本身。在本书中,我不会使用任何 IDE 的花样技法演示代码的编写和调试——甚至于使用最笨拙的方法——而是要聚焦于编程语言本身。

至于应该选择哪种 IDE ,此处也不替读者决策,仅建议读者不要在 IDE 上花费太多精力。