1.4 运行Python

安装完Anaconda之后,“是骡子是马,要拉出来遛遛”,那么下面我们就来验证Python是否安装成功。然后,开始Python基础语法的讲解。

1.4.1 验证Python

怎样确认Python已经成功安装了呢?通常,在打开的终端(对于Windows系统而言,在运行窗口使用CMD命令;对于Linux和macOS系统而言,开启一个新的shell终端即可)输入“python --version”命令(注意,python与参数version之间有一个空格,version前有两个短线),会显示Python的版本号,如果能正确输出Python的版本号,就间接证明Python已经安装成功。下面以Linux系统为例来说明。

上面的输出结果显示,我们成功安装了Python 3.7.6。需要注意的是,由于Linux和macOS默认安装了Python 2.7,所以如果我们不更新环境变量的话,运行上述命令的结果可能是2.7.5。这时,我们需要显式更新环境变量,命令如下。

接下来,在命令行输入“python”,启动Python解释器。需要注意的是,在Windows系统中,命令不区分大小写。而在Linux和macOS系统中则相反,需要严格区分大小写,所以命令行中的“python”字样必须全部小写。

Python解释器正常启动后会出现提示符“>>>”,所以上面代码中显示“>>>”时,表明Python解释器已经“万事俱备”,只待用户输入语句。

1.4.2 Python版本的Hello World

通常,学习一门新语言,我们编写的第一个程序都是“Hello World”,它几乎成为迈入编程世界的一种朝拜,以至于“Hello World”程序的开创者西蒙•科恩斯(Simon Cozens)开玩笑地说:“它是编程之神留下的咒语,可助你更好地学习语言。”

下面让我们也一起念念这个咒语吧。在Python中,运行程序的第一种方法,就是在IDLE提供的shell窗口“shell”的本意是“外壳”,这个外壳是相对于操作系统的内核(kernel)而言的,用户可在shell窗口中输入命令,然后解释器会负责解释这些命令,并送达内核执行。因此,shell本身提供了一种与底层操作系统交互的途径。中输入Python语句。由于Python是解释型语言,所以在正确输入Python代码之后,按下回车键,就能得到运行结果,交互性非常好。

对于“Hello World”程序而言,在“>>>”提示符下输入如下语句,按回车键即可执行。

这种“按下回车即刻执行”的模式,也被称为“交互模式”。在这种模式下,如果用户想询问“1+1等于几”,只需输入“1+1”,然后按下回车键,Python解释器马上就会给出答案“2”,代码如下。

这里有一些常用的小技巧值得学习,例如,在输入代码时,可先输入部分字符,然后按Tab键,让IDLE补全(例如,当输入pri时,按Tab键,系统会自动补全为print),相信熟悉Linux和macOS的用户对此技巧早已熟稔于心。要想退出交互式模式,既可以输入exit()函数退出,也可以按Ctrl+D组合键退出。

1.4.3 Python的脚本文件

在交互式模式下,用户每输入一行代码,一旦按下回车键,Python shell就会即刻给出解释并执行,这很方便。但有时我们希望编写完若干行代码之后,再一起执行前面编写的代码。在这种情况下,该怎么办呢?

解决的方法也很简单,这时我们需要创建一个以.py为扩展名的Python源文件。然后运行这个源文件。那如何创建一个Python源文件呢?

本质上,所有源文件都是文本文件(text)。因此,我们完全可以利用一个纯粹的文本编辑器来编写Python程序,然后将其另存为.py文件。

但一般来说,纯文本编辑器对用户并不友好。比如说,它可能没有代码行号,也缺乏语法高亮功能。此外,它和Python的解释器没有关联,因此调试困难。于是,很多集成开发环境(Integrated Development Environment,IDE)应运而生。开发Python的IDE有很多,除了Python自带的集成开发环境IDLE(Integrated Development and Learning Environment,集成开发与学习环境),PyCharm(由捷克公司JetBrains开发的一款Python开发工具)、Anaconda集成的Spyder,甚至Vim、Sublime Text和Notepad++经过一番加工配置,都可以成为一款称手的IDE。读者可根据自己的喜好,选用自己喜欢的IDE。

“远亲不如近邻,近邻不如对门”。事实上,我们不必求远,Anaconda内部集成的Spyder,已是一个简单易用的集成开发环境。和其他Python开发环境相比,它最大的优点就是能模仿MATLABMATLAB是著名的商业数学软件,常用于算法开发、数据可视化、数据分析及数值计算。的“工作空间”功能,方便观察和修改数组的值。

在命令行输入spyder命令,即可启动该开发环境(在Windows操作系统中,可在【开始】→【所有程序】中找到Anaconda菜单,里面就有Spyder的专属图标,用鼠标单击即可启动执行)。

启动Spyder后,在Spyder菜单栏的File菜单中,选择“New File”命令(或者使用组合键Ctrl+N进行选择)。这时弹出的空白代码框可供我们书写多行代码,如图1-10所示。

图1-10 Spyder的开发界面

这里,我们暂不解释Python的语法,在后面的章节中,这些语法都会涉及。如果想执行图1-10所示的代码,单击菜单栏中的执行按钮(▶)即可。假设该Python文件保存的文件为demo-sum.py,我们还可以在命令行下执行Python的脚本文件对于Python 3.x而言,可使用python3来执行“.py”文件,命令为python3 demo-sum.py。

在Windows操作系统下,可用相同的命令行执行上述Python脚本文件。不同的是,系统的提示符不一样,这里不再赘述。

1.4.4 代码缩进

学过C、C++或Java的读者都知道,在这类编程语言中,通常需要用一对花括号“{}”来界定模块的范围(即作用域)。正是因为有了这一对花括号的界定,编译器才可以很容易地知道各个模块的界限所在,但这样一来,也导致了源码编写风格各异。

风格各异的代码会带来混乱性。这种混乱性是有隐患的,因为编程风格不同的人组建成一支开发团队,很容易造成沟通上的困难,从而为代码缺陷(bug)埋下伏笔。未来即使发现代码有问题,维护起来也会比较困难。

通过前面的描述,我们知道,Python的设计哲学是“给我最优,别让我选”。于是Python干脆提供了一个“一刀切”式的强制解决方案—相同层次的代码,必须有等同的缩进。通常,缩进使用单个制表符Tab键、2个空格或4个空格来表示,可界定代码模块的归属。

虽然Tab键或空格均可控制缩进关系,但不建议二者混用。这是因为,代码在跨平台解析时,不同平台对Tab键占据几个空格,没有统一的规定。如此一来,很容易导致在一个平台上层次井然有序的代码,换到另外一个平台时却显得参差不齐,从而让代码无法正常工作。因此,选择一种缩进风格,然后持之以恒,方为正道。下面我们以【范例1-1】来说明代码的缩进关系。

【范例1-1】在Python中运行多行代码(ScoreRank.py)

现在简单介绍一下【范例1-1】中涉及的语法。第03~13行都属于while循环的管辖范围,这是因为从while的下一行开始(第03行),这些行都被统一缩进1个Tab键。

再细分一下,第05行隶属于第04行的管辖范围(因为第05行相对于第04行有1个Tab键的缩进),第07行隶属于第06行的管辖范围,以此类推。一言以蔽之,在Python中,等级森严,同一级别的代码必须具备相同的缩进量,如图1-11所示。

图1-11 Python代码缩进关系示意图

除了用统一的缩进表明隶属关系,Python还规定,要在上一行的末尾,用一个半角的冒号“:”来彰显自己的“势力范围”。现在再来仔细观察一下图1-11所示的代码,它们都具备这样的特征。

正因为如此,在程序员圈子里,流传着这样的笑话:开发Python代码,需要购买游标卡尺。事实上,诸如Spyder、PyCharm等IDE工具都提供了代码自动对齐的功能,即输入正确的冒号并按回车键之后,第二行会自动缩进,所以我们无须过分担心。

1.4.5 代码注释

注释对于增强代码的可读性非常重要。有人开玩笑说,“不写注释的代码,只有一周前的自己能看懂”。良好的注释,对于团队协作非常重要。Python中的注释方法有多种,这里仅介绍单行注释和多行注释。

单行注释以“#”开头,例如【范例1-1】中的第01行。

进行多行注释时,通常用三个单引号'''将注释部分括起来,如下所示。其中第01行和第05行分别为多行注释的起点和终点,第02~04行为注释部分。在注释部分,不论是什么内容,都会被编译器忽略。第06行为正常代码,编译器可见。