工欲善其事,必先利其器
![1906d070123a7bcb257e63090939f1b8.png](https://i-blog.csdnimg.cn/blog_migrate/bd218a7fee1218e515d8a3e382c33fec.jpeg)
Python2还是Python3
如果你没有听说过Python2、Python3什么的,那么,一个简要的声明是:
我的这个教程,所针对的,是Python3
如果你曾经对这二者有个耳闻,那么,我建议,放弃Python2吧,尤其如果你是一个Python语言的初学者的话。
Python2,距离它的正式退休,已经只有短短的7个半月了。
![1039e75763c5c543f0d619e3d5e5836b.png](https://i-blog.csdnimg.cn/blog_migrate/eed23f76acb0dee0d118de067f70e9df.jpeg)
Python解释器
或许,你已经迫不及待的准备开始编程了?但别着急,我们还需要准备一个软件,这就是被称之为:Python解释器的东西。
什么是Python解释器?
基本上,我们可以把他类比为会场上,一个称职的外文同声翻译员。二者的职责所在,都是将一种语言,即时准确的翻译为另一种语言。
只不过,同声翻译所处理的,是两种不同的人类语言,比如一种英语,一种汉语;
而Python解释器(Python interpreter)所进行的工作,则是将程序员写的Python“源代码”,翻译成普通人,甚至包括很多程序员,都不知所云,但却可以被计算机理解并执行的“机器指令”。
【小贴士1】指令(instruction):计算机是一个很傻的工具,他只能完成有限的几种基本操作,这些基本操作就叫做指令,而编程的过程,其实就是在这些操作间,不断的进行各种组合的过程。
如果你还是不能理解,那么,可以类比一下算盘,基本上,施加在算盘上的指令就两个,即:
- 在某个档位上,往上拨一颗珠子
- 在某个档位上,往下拨一颗珠子
而编程,则是根据某个顺序,反复的执行这两个指令。这个过程和计算机实际上并无二致。
【小贴士2】严格的说,和现代很多语言,比如Java类似,Python解释器翻译生成的,其实是一种被称为字节码(Byte Code)的伪机器指令,只能运行在一种被称为Python虚拟机(Virtual Machine)上,这中间的细节并不简单。但我觉得,作为初学者,其实根本不需要关心这些。
![9195ed6efed9476fb624baa361f5fe57.png](https://i-blog.csdnimg.cn/blog_migrate/e6d379d2323aa15f4c1d4327563eaad2.jpeg)
Microsoft Azure Notebooks
不幸的是,不管是在OSX上,还是在Windows上,并没有缺省的为大家准备任何形式的Python3的解释器,以及对应的类库,这几乎成了很多人学习Python时,所遇到的第一个困难。
不用觉得奇怪,即便是非常有经验的Python程序员,有时候也会被这些问题,搞个灰头土脸,动不动一天就过去了,还特别没有成就感。
所以,其实我是并不赞同初学者在学习的一开始,就将自己陷入到这样的泥淖之中的,因为我们有:
Microsoft Azure Notebooks
![57c11efea04317ba2b5c4f2696216608.gif](https://i-blog.csdnimg.cn/blog_migrate/43e47152a84fdb0ca3a8aa2cf2825480.gif)
这实际上是微软基于Jupyter,为开发者提供的一个在线笔记本服务。好吧,暂时我们可能不需要知道那么多,把它当成一个“开箱即用”且“免费”的Python代码编辑和运行环境就好了。
而且,最为便捷的是,对于大部分的“知名”类库,Azure Notebooks已经实现了自动的即用即装,并不需要开发者进行任何的人为配置,这一点,对于大家“优雅”的学习Python,显然是大有裨益的。
【小贴士3】Microsoft Azure Notebooks的作用当然不止于此,实际上,借助于微软Azure强大的云计算能力,我们可以“免费”的用Azure Notebooks来做很多事。此外,事实上,除微软外,Google也提供了类似的免费服务,即:Colab。有条件的朋友,也可选择使用,在易用性上,我个人觉得,比Azure Notebooks要来的稍微好一丢丢。
【小贴士4】如果你仅仅需要一个可以在线编写并执行Python代码的环境,而不需要Jupyter所提供的其他功能的话,那么,repl.it也是一个不错的选择,而且两个特点,让我无法忍住自己不去推荐他:
- 强大的代码自动完成功能
![6e7b25fa33f36769bf937613813d9c8c.gif](https://i-blog.csdnimg.cn/blog_migrate/62331d09e8c25aea9b601fefef77f20e.gif)
- 除Python外,他还支持共大几十种开发语言代码的在线编写和执行
![8367f875e22000b9ca2810fab785784e.png](https://i-blog.csdnimg.cn/blog_migrate/1214c9ce1a805fc2a185d767cebe8587.jpeg)
而之所以我没有在一开始就推荐他,则和没有在一开始就介绍Colab的原因一样,想要顺畅的使用到这两种工具,可能你还需要一丢丢额外的辅助。
【小贴士5】我相信,repl.it的经营者,选择repl作为域名,并不是随意的,在软件开发技术中,REPL属于一个专用术语,是4个英文单词的简称,即:Read–Eval–Print-Loop,即:交互式编程环境(其实我不觉得这个翻译有多好)。简单来说,可以把REPL看成是一种代码会立即解释执行,而非编译执行的代码运行环境。大部分脚本语言的开发者,很多都在其引擎中,植入了相应的REPL软件,以供用户使用。
以Python为例,其所缺省安装的REPL为:ipython,如果你本地已经正确安装了Python引擎,那也不妨可以试着使用下,我在此就不赘述了。
简单又不简单的“Hello World”
好的,下面可以正式开始我们的Hello World之旅了。在Azure Notebooks上,创建一个工程,并在其下新建一个笔记本:
![4875321ee65c894fb34334c7fc4be319.png](https://i-blog.csdnimg.cn/blog_migrate/8abec2d77f871bac832fc9c7b1646894.jpeg)
之后,在笔记本的第一个单元(Cell)中,输入如下代码,然后Run(执行),即可完成我们的第一个程序:
print("Hello World")
感觉简单的有点可怕?是的,很多时候,编程其实就是这样的直接明了。
但事情又不仅仅如此。首先,对于熟悉Python2的人来说,特别需要牢记的,是:在Python3中,print已经不再是一个语句,而是一个函数(function)!函数!函数!重要的话说三遍,其完整的语法如下所示:
print(*objects, sep=' ', end='', file=sys.stdout)
【小贴士6】函数是Python下最重要的语言现象之一,在Python中,函数不仅仅是对象,而且是第一类对象,关于函数的细节,我们将在后面的课程中专门讲解,这里,只需要知道:使用(实际上,程序员更喜欢使用“调用”这个词)一个函数的最简单的方法,就是:
函数名(参数1, 参数2, ......)
至于为何,Python要执意做这样的转变,则有一个很长的历史渊源,在这就不展开了,其中的一个动力,在我看来,应该源于对灵活性的追求。比如可以像下面这样,借助于lambda表达式,来实现一个自定义的特殊的输出函数period_print,其会在每个输出内容最后,自动增加一个句号(。)作为结尾:
![d06a831451ab789d31ba0187869fcf39.png](https://i-blog.csdnimg.cn/blog_migrate/2e550c8197c27e5d53ffcfaa7caebbd3.jpeg)
这在print还是语句的时代,是不可想象的。当然,初学者或者尚看不明白所写为何,这不要紧,在后面的课程中,我们会一一涉及的。
其次,作为一个使用频率非常高的函数,即便我们单看print函数自身,也有诸多特别之处,值得我们留意,这里先讲2个。
(1) print一次可以接受多个对象的输出
不用太多的解释,简单的说,就是以下的两个语句,执行的效果相同:
![4e976f6736bb65ae4ebc97c48d0d3b60.png](https://i-blog.csdnimg.cn/blog_migrate/8a2be7aca9dd5c74ca41b4eeebeb4e2a.jpeg)
而且,print甚至不要求输出对象,都是字符串类型!因为Python会自动的将其转换为字符串进行输出。
(2) print函数下,可以通过修改如下参数,对输出进行控制:
- sep参数:设置每个对象间的输出内容,缺省为空格
- end参数:设置结尾处的输出内容,缺省为回车
【练习1】试解释为什么print("Hello World")和print("Hello