Python —— 从零到远方 第一章

作者: 程飞

第一章 归零然后开始

1 PythonTIOBE指数

Python确实是一门神奇的计算机语言,从TIOBE编程语言指数上看,Python近年来上涨的非常快,已经稳居第三名,指数超过第四名——曾经无比神奇的C++4%之多。前两名是Java和C语言,一个是几乎所有安卓手机都在用的Java语言,另一个是几乎所有嵌入式系统和操作系统都在用的C语言。

Python可能是对于非计算机专业的学生、学者和爱好者非常友好的计算机语言了,上手难度在编程语言中是非常低的,而能够实现的功能和算法却非常专业和高效。Python就像是一辆调教良好的自动挡汽车,好开又省油。这并不是说计算机专业的学生就不要学Python了,恰恰相反,试问有多少人考了C1驾照还开手动挡汽车的?

那到底Python能做一些什么呢?这个问题应该反过来问:Python不能做什么呢?好像不能做的事情很少。就连安卓程序也都可以使用Python开发,只是不那么成熟。目前,Python被大量的用在了人工智能、科学计算、金融量化交易、云计算、网络编程、系统运维等重要领域。尤其是人工智能领域,几乎完全就是Python的天下。

为什么Python会这么火爆?按照我的理解,Python语法简洁明快并且丰富、不需要考虑内存管理、丰富的模块库、以及可以和C/C++无缝连接,成就了Python今天的流行。从语法角度看,Python非常贴近自然语言,没有C/C++那些奇怪的符号,没有严格定义的变量类型,非常自由灵活。在变量类型方面,又有着list(列表,类似于C的链表)和dict(字典,类似于hash表)这种神一般存在的类型,让编程变得无比舒服;而内存管理方面,Python并不需要编程人员考虑太多,也不需要通过指针直接操作内存,因为有list和dict两个类型,完全不需要C语言的指针了,对于编程人员来说绝对是一大幸事;而丰富的模块库,简直就是“拿来主义者”的天堂,Python打包好的模块叫做Wheel,扩展名是whl,寓意非常明确,不要发明两遍轮子,已经有的,就直接拿来用,Python强大的功能,几乎都是通过模块库来实现的,例如科学运算中必备的Numpy和Scipy,人工智能领域常用的Tensorflow;而这些模块库,可以通过Python编写,也可以通过C/C++编写,这一点可以保证效率,用Python编写可以保证开发效率,而用C/C++编写可以保证运行效率。所以Python也称作胶水语言,它可以利用现有的各种优秀的模块库,粘贴出一个非常优秀的程序。

如果你有幸没有学过任何编程语言,上面那段话可能让你感觉不知所措。但是幸运的是,你没有学过其他语言,所以你上手的学Python的速度可能更快。你只需要知道的是,Python可以很快的编写,也可以很快的执行,几乎无所不能,这就足够了。而不幸学过其他语言的同学,如果学的是类C语言,包括C、C++、Java这些,就要走出舒适圈,去适应新的语法了。

下面我们真正的开始学习Python了!

最一开始,我们需要让你的电脑可以运行Python代码以及可以写Python的程序。很多书把这一步描述的特别简单,粉饰太平,把问题留到后面,我认为是不对的。这一步可能是你学习Python的途中最难理解,最复杂,也是最讨厌的一步,没关系,一旦明白了一切就都明朗了。所以在这一步我们要有点儿耐心。

想运行Python的代码,就需要Python的运行环境,而一个运行环境包括一个Python解释器(通常在Win系统是python.exe文件,Linux和Mac系统是一个带有可执行属性的python文件),以及围绕在这个解释器周围的模块库。但是搭建运行环境的方式非常多样化,简单的说,主要分为两种方式:使用系统级的运行环境和使用虚拟环境两种。对于Win和Mac用户来说,我们从https://www.python.org下载好对应你操作系统版本的Python(推荐安装最新的稳定版,目前是3.7)的安装包后,如果你有管理员权限,双击后就可以安装了,所有都采用默认的设置(请记住安装的位置,这个很重要),完成之后,你就拥有了一个系统级的Python运行环境。看起来很简单,但是我们要确保安装正确了才能进行下一步:Win10系统按windows键后,输入cmd按回车键,打开命令行的黑框框,输入python然后回车,如果现实的是没有该程序,则需要添加环境变量(本章最后附加了操作方法);Mac系统从Lunchpad(四指一捏)找到终端(英文系统为Terminal)打开命令行的白框框,输入python3然后回车,就可以打开Python的Shell界面:

2 Python Shell界面 (我的Terminal改成了黑框框)

如果看到的是上面的景象,版本是Python 3.7.x,那基本上就对了。为了更好的使用Python,我们还需要确保pip工具安装正确,pip工具是用来给python安装周围的模块库的,仅需要非常简单的语句,就能从网络上直接帮你下载并安装好那些有用的模块,例如Numpy(Python + Numpy ~ Matlab)。目前新的Python安装包已经自带了pip工具,我们直接来尝试:依然是在命令行里输入exit()并回车,先退出Python的命令行模式(等会儿再说这个模式),在Win系统的cmd下输入pip -V并回车, 再输入 where python并回车来分别看到pip的路径和python的路径; 在Mac系统的Terminal中输入pip3 -V并回车,然后输入which python3并回车,查看pip3和python3的路径:

3 结果表明pip3python3是对应的,因为路径是一致的

我们需要确认python和相应的pip是对应的,因为你的系统里可能会有很多版本的python和pip,如果使用了不对应的pip工具,则会出现明明安装了某个模块,但是python里却不能用,这是新手常见的烦恼之一。到这里,其实我们已经确保了我们的系统级的Python运行环境是可用的了。而另外一种虚拟环境的搭建方法,也有很多种,甚至是通过不同的工具进行建立,我们将在后面通过IDE软件来实现。

一般的教程,到这里就迫不及待的教大家开始写程序了,但我们还需要等等。在上面图2中,我们通过命令行启动了Python的Shell界面,在这个界面下,就已经可以写Python的代码,回车就可以执行:

4 猝不及防的Hello World

难道我们就这样写Python程序吗?当然不可能,这个Shell界面通常用来测试一些简单的代码,或者用来做一些简单的科学运算。更通常的做法是,我们把一段Python的程序写在一个扩展名为py的纯文本文件(就是使用Win系统的记事本就能直接打开的文件),然后去运行这个文件,这样就能运行一个完整的程序了。而能够运行这个文件的程序就是Python解释器,也就是前面提到的那个在Win系统下是python.exe在Mac和Linux下是python或者python3的可执行程序。操作方法十分简单:python your_python_code.py。然后就能在屏幕上看到执行的结果了。

下面的问题就是如何编写这个py文件了。既然记事本都能打开,当然可以用记事本来写Python程序,但是除非你是一等一的高手,否则不要这么做。我们需要借助IDE(Integrated Development Environment)工具,IDE是程序员的超级管家,帮你管理文件、管理版本、纠错调试、以及运行程序。事实上Python官方自带了一个叫IDLE的IDE,从名字就能看出来是一个被闲置不用的的工具,确实不怎么好用,虽然界面很简洁:

5 Mac下的IDLE因为连菜单栏都分离出去了,感觉和命令行差不多了

当然业界也流行着很多关于VIM和EMACS的神奇传说,他们确实很棒,也能打造成高效的Python IDE,只是学习成本太高了,不值得。下面,我就请出我们的主角:PyCharm,这个名字看起来就很优雅:

6 PyCharm 官网截图

PyCharm具有优秀IDE应有的特征:多种语法高亮主题、深色护眼界面主题、完善的语法提示、版本管理等。除此之外,PyCharm还可以直接帮助我们建立Python的虚拟运行环境。推荐大家从PyCharm的官网http://www.jetbrains.com/pycharm/download/ 下载社区版或者专业版,一般来说,大学的学生和老师邮箱可以免费享用专业版。所以我们还是使用专业版,顺便提一句,这家公司的其他软件也都很好用。安装的过程中需要注意下面这个界面最好全部都勾选了:

6-2 补充的一张Windows安装界面,Mac里似乎没这个问题

其他的选择默认的路径,默认的选项,直到你来到下面这个界面:

7 PyCharm 欢迎界面

单击 Create New Project:

8 New Project的创建页面

如果看起来不是图8的样子,就点击中间偏上的Project Interpreter左边的小三角来展开成这样。下面我们来仔细看看这个界面的右侧,Location这一栏是填写工程所在的路径,其中最后一段目录的名称就是工程名称了。然后我们需要重视Project Interpreter,首先PyCharm提供了两个大选项:New Environment 和 Existing Interpreter,我们先看后面一个——Existing Interpreter。当我们点击Interpreter后面的选型列表后,可以看到所有PyCharm记录过的解释器,无论是系统级的还是虚拟运行环境:

图9 选择Existing Interpreter

如果这里没有你所需要的解释器,请点击后面的…按钮:

图10 Add Python Interpreter

在弹出的Add Python Interpreter界面中,我们就可以选择System Interpreter或者前面建立好的虚拟环境了,虚拟环境我们通常使用Virtualenv或者Conda来搭建。下面我们退回到图8来搭建虚拟环境,我们重新选择New Environment,在using选项里,我们先尝试使用Virtualenv搭建一个虚拟环境。如果你选择了Virtualenv,然后右下角出现了一个闪电符号,就意味着你电脑上没有安装Virtualenv的工具,需要打开命令行,使用pip install virtualenv进行按照,如果不行可以参考https://virtualenv.pypa.io/en/latest/installation/。搭建的方法十分简单,我们其实只需要指定一个Base Interpreter就可以了,从下拉菜单选择一个合适的Python版本,可以通过路径来判别是哪一个Python环境,因为以后有可能你为某个解释器安过一些特殊模块,如果没有找到想要的,则通过…按钮直接选择一个python解释器的可执行文件,可以参考前文中在命令行使用where和which的办法先找到,然后在这里选择。虚拟环境的Location一般不建议更改,下面两个勾选框,第一个是从Base Interpreter继承所有的模块库,这个视情况勾选,如果你已经配置好了一些基础库,下次用的时候可以继承过去。第二个选项是让这个解释器可以被所有项目可用,一般不勾选。然后我们就可以单击Create按钮了来创建虚拟环境,并创建工程了。说了这么一大堆,如果顺利的话,可能你只需要点击几下鼠标就过去了,然后我们来到了真正开始工作的地方:

11 PyCharm的工作界面

我们可以看到工程文件夹下有一个venv文件夹,这就是虚拟环境所在的地方,里面就包含了python解释器以及一堆模块。将虚拟环境目录放在工程目录里的好处很多,你可以直接把工程打包发给你的团队成员,让他们可以不用配置环境就能运行你的程序(当然需要同一种操作系统。而使用虚拟环境可以尽量将项目之间的模块需求进行隔离,随着你后面项目会越做越大,不同的程序甚至对同一个模块的版本有细微的要求,虚拟环境可以有效解决这个问题,在虚拟环境里你不需要担心把事情搞砸了。值得注意的是,这里的虚拟环境和虚拟机不是一个概念,这个Python的虚拟环境要轻量级的多,本质上是将程序运行的环境变量修到一个特定的Python目录,从而实现一个隔离的Python运行环境,让你可以方便的切换版本。通过Conda创建创建虚拟环境的方法和上面也是差不多的,只不过不需要选择是不是继承全局模块库。

我写了这么多,其实当你明白了之后,每次操作都是几秒钟的事情,但是这几秒钟的背后是一个项目顺利开始的根基。所以我希望你一开始把事情都搞得比较明白,然后再着手学习代码。

下面我们尝试一个极为简单的Hello World:在左侧的项目目录上右击,选择 New -> Python File,然后输入一个名字,比如说Hello,然后创建文件。输入一行语句:print(‘something’),然后在Run菜单里选择 Run… 然后选择Hello:

12 尝试Hello World

下次运行这个文件的时候,只需要在Run菜单里选择第一个——Run ‘Hello’就行了。当然你也可以根据不同的操作系统记忆快捷键,如果你使用带有Touchbar的Macbook,也可以自己配置Touchbar的快捷操作。

至此,你已经拥有了一个功能强大的Python IDE了,并且你对这里面的运行细节也有了一定的了解,当然,后面随着编程学习的深入,你会逐渐体会更多。

PS: Windows如何设置环境变量:

  1. 按Win键,选择左边的齿轮图标——设置;
  2. 搜索“环境变量”;
  3. 选择“编辑系统环境变量”;
  4. 在界面的右下方,选择“环境变量”;
  5. 在“系统环境变量”的列表里找到 Path并双击;
  6. 添加python和pip的路径。

通常情况下,python的路径是:

C:\Users\xxx.xxx\AppData\Local\Programs\Python\Python37

pip的路径是:

C:\Users\xxx.xxx\AppData\Local\Programs\Python\Python37\Scripts