Python基础|05.三大神器助力Python开发-Python环境搭建(一)

青少年、零基础、初学者Python编程从入门到精通,“老马带小马 一块学Python”编程系列。
首先出场的是第一神器,程序“编辑器”。对于初学者,编写的程序都比较简单、代码很短,没有必要用复杂、专业的程序编辑环境,避免喧宾夺主,把时间浪费在配置编辑工具、学习编辑工具上了,而且期间要是出现任何意外麻烦,往往非常耽误时间查找原因、解决问题,甚至可能直接会打击或消磨大家的编程激情,得不偿失。因此,我推荐零基础、初学者直接使用“记事本”来编程,电脑上的“记事本”大家应该都用过,经常用来记一些备忘的事或文字,用专业的术语来说,记事本就是一个文本“编辑器”,我们完全可以直接在记事本上编写程序。
需要注意的是,在记事本上新建并保存程序文件时,文件的扩展名一定要保存成“.py”,而不能是默认的“.txt”,文件的扩展名就好比人的姓氏,代表了这个文件的归属和类别,大家约定俗成把Python程序存储成以“.py”为扩展名的文件,就好比Word应用的文件,扩展名为“.doc”或“.docx”,在需要打开这些文件时,直接双击,就会运行Word应用并打开这些文件。但在这里要特别提醒一下大家,不能用Word来编辑程序文件,用过Word的同学应该都知道,Word是一个高级的文本编辑器或者说是一个富文本编辑器,在Word中我们不仅可以写文字,还可以对我们写的文字设置不同的风格、格式,比如,可以选择不同的字体、设置字体的大小以及是否粗体等等,最后保存成文件时,Word不仅会把我们写的文字内容保存到文件中,还会把文本风格、格式也同时保存到文件中,所以如果我们用Word来编写程序,最后存储的文件就不是纯粹的程序文本了,导致电脑无法识别并执行。
接着,第二神器,Python语言“解释器”闪亮登场。回到我们编写的扩展名为“.py”的Python程序文件,虽然它里面包含的确实是程序,但现在还只是程序源码,光仅仅靠这个文件,电脑是没法直接执行的,为什么呢?因为Python编程语言是众多“高级”编程语言中的一种,当然也是目前最流行的编程语言之一,尤其是最流行的人工智能编程语言,没有之一。正是因为是“高级”语言,也就意味着更接近“人”的思维理解、更有利于我们快速入门上手,但同时也意味着离电脑的直接“理解”和“执行”比较远。
究竟Python高级编程语言离CPU可直接执行的指令有多远呢?可以用大家熟悉的网购来类比一下。
  • 我们编写的程序就好像大家网购时拟的采购清单,然后有可能上京东购物,或者淘宝、亚马逊、拼多多等等,这些电商平台就好比我们常用的操作系统,大家可能极大多数都在用微软的Windows操作系统(比如Windows 10,或者Windows 7等),其实现实生活和工作中,还有很多用户使用的是苹果的Mac OS或者是Linux等操作系统,不同的操作系统,为我们的程序运行提供的底层服务是有很大差异的,就像不同的电商平台,提供的价格、打折方式、购物流程及体验,甚至针对的客户群都是不一样的。
  • 继续与网购类比,电脑的CPU则好比我们网购产品的最终生产厂家,不同的机器指令则好比不同的产品,电脑机器指令的执行过程就好比产品的生产过程,现实生活中,大家都能很清楚的感知到,不同厂家的产品,即使生产的是同类、同规格的产品,仍然是有差异的,同样,CPU也是由不同厂商制造,比如,大家用得比较多的CPU基本上都是Intel、AMD,他们支持的机器指令也是存在差异的。
从上面的类比中我们可以看出,从最初我们拟定的采购清单,到电商平台的采购,再到最终生产厂家的产品生产,经历的是完全不同体系的跨越,尤其还面临不同电商平台的差异、面临不同厂家所生产产品的差异,如何让最终的产品完全满足最初清单的要求,如何让我们编写的Python程序,在不同操作系统下、在不同CPU指令体系下都能得到完全正确无误的理解和执行呢?这就需要有一个相当厉害的翻译,也就是我们称之为的“解释器”。我们再梳理一下“解释器”要解决的难题:
  • 首先,不同的操作系统,提供的底层服务是很不一样的,比如对存储在硬盘中的文件的读写操作、网络通信相关的接口调用,以及涉及操作系统进程和线程调度相关的服务等,就像京东、淘宝等不同的电商平台提供的下单采购服务、仓储物流服务、售后服务等也是有差异的,那么就需要我们的“解释器”能够灵活处理这些的差异,把我们编写的、通用的Python程序,能正确映射到实际操作系统的服务接口上,确保Python程序中涉及操作系统调用的指令能正确无误地执行。
  • 接着,对于CPU的不同、指令体系的不一样,“解释器”必须要能够正确的翻译。就像电商平台上众多产品的不同生产厂家,这些厂家的组织架构不一样、管理方式不一样、生产流程及工艺也不一样,这时候,就需要我们对商品的需求能完整地、正确地转换成对具体生产厂家相应产品的特定生产指令,才能最终达成符合我们要求的商品购买目标。电脑的“解释器”则同样,必须能针对具体CPU的指令体系一丝不差的翻译、映射,不能有任何差错或遗漏。
  • 另外,还存在更大的挑战。因为CPU每一条机器指令的执行都是异常复杂的,有的是控制指令、有的是运算指令,而控制指令又涉及到指令译码、控制矩阵、时钟脉冲发生器等,运算指令则包括算术运算、逻辑运算,且每一类里面又有很多细分,这里面任何一个细分指令都可能涉及到CPU中成千上万元器件的完美配合才能完成,正是因为如此,CPU的指令不允许功能复杂、过于高级的指令,否则CPU成本就会急剧上升、硬件设计复杂度更会成指数上升,就像现实生活中,没有哪一个厂家能完全生产一架飞机一样,据说一架波音777飞机上有300万个零部件,由来自全球17个国家的900多家供应商提供。但是,如此一来,并没有解决问题,只是把问题转移了,CPU的指令如果都非常底层的话,我们直接用CPU的指令来进行编程,那就太过于复杂了,随便编写软件一个规模项目,估计都相当于咱们自己组装一架飞机一样困难,显然是低效、不划算的。正是因为如此,各种高级语言,比如Python出现了,采用更加便于理解的、人性化的、高级封装的指令,让我们可以更加高效地、更多地把我们的注意力和精力投放在我们要实现的研发目标上,而不是CPU的机器指令上,往往一条高级指令可能对应几十、上百甚至成千上万条机器指令,相当于最终由“解释器”替我们完成了这些大飞机的封装及拆卸工作。
  • 再深入探讨一个细节问题,早期的解释器,就像同声翻译一样,一边读取源码,一边实时翻译解释成机器指令给CPU执行。后来大家发现这种设计效率极低,因为每执行一次,都要对我们的源码重新进行词法及语法分析,相当于前面讲到的,要对“飞机”进行拆卸一遍一样,即,需要把高级语言转换成相应CPU低级机器指令;那么有没有一种可能,我们事先把Python源码转换成一种中间代码,或者说是一种理想中的、通用的、虚拟CPU的指令,相当于一次性把高级语言降维成通用CPU的机器指令,这样的话,对源码的词法分析、语法分析只进行一遍即可,即对“飞机”只用拆卸一遍,后面每次再执行程序时,只用根据具体CPU的指令差异,实时的把通用虚拟CPU的指令映射成具体真实CPU的指令即可,可以极大提高程序执行效率和速度。现在的Python解释器就是这样做的,我们的Python程序在第一遍执行时,就会生成扩展名为“.pyc”的文件,一般我们叫做“字节码”,其实就是我们这里提到的中间代码,后面再次运行时,直接基于“字节码”就可以了。
最后一个神器,“调试器”。有了这个神器,我们可以在程序执行过程中随时喊“停”,就像孙悟空喊“定”一样,让程序执行现场随时“凝固”住,方便我们调试、排错,比如,看一看当前场景中各个变量的值是否正确;通过这个神器,我们还可以让程序“单步走”,即人为控制着一步一步的执行,可以有效检验程序执行的流程是否正确,比如上一节中我们学的for循环,可以通过“单步走”的调试方式检验for循环的运行及控制机制;当然,我们的程序经常还采用print(即直接屏幕打印输出)及日志输出(把程序运行的关键节点及相关变量信息以硬盘文件的形式输出)的方式检验程序运行状况及排错,但对于非常难以排查的局部错误,尤其在编程研发阶段,“调试器”非常有效、非常管用,比如,上一节中提到的“缩进”和for循环“程序块”,有时候可能一不小心忘了缩进,某段代码可能就不从属于for循环“程序块”了,而且执行的时候不会提示语法错误,但就是结果不对,怎么办?通过对相关代码进行“单步走”调试,一步步的跟进检查,就很容易发现问题了。
好了,这一节就讲这么多,主要讲到了“三大神器”,尤其“解释器”的作用,让大家对源码、操作系统、CPU、字节码等,以及他们之间的依存关系有了更清晰的认识。现在咱们使用的各种工具越来越高级,包括咱们使用的Python这种高级语言,版本在不断升级、功能在不断丰富,但问题在于,我们在使用这些高级工具的时候,往往漠视或忽略了底层的支撑体系,导致我们大家与底层之间的鸿沟越来越深,使得我们很多时候,知其然、不知其所以然,只知道如何用,但出了问题的时候,尤其是深层次问题,或者是大型项目面临性能瓶颈需要调优的时候,就干瞪眼、束手无策了,即使对于我们初学者,知道了他们的本质作用,后面在安装、配置及操作上就会更加的清楚明白、心中有数,而不是糊里糊涂了,入门、上手则会更快。
小知识补充:
小马:为什么在Windows文件资源管理器中看不见文件的扩展名,且也没法更改文件的扩展名呢?
老马:需要更改一下文件资源管理器的配置,打开“文件夹选项”,把“隐藏已知文件类型的扩展名”前面的“勾”去掉;或者在工具栏的“查看”页,把“文件扩展名”前的选项框“勾”上。要是还不会的话就自己百度吧,网上有很多更详细的操作步骤说明,这里就不细说了。
小马:用记事本新建的“.py”文件保存关闭后,下一次再编辑时,如何用“记事本”打开呢?
【Python基础|05.三大神器助力Python开发-Python环境搭建(一)】老马:第一种方法,先启动“记事本”,然后进入菜单“文件”,单击“打开”,弹出“打开”窗口,更改窗口右下角的文件类型,选择“所有文件”,这个时候,扩展名为“.py”的文件就在窗口中显示出来了,可以选择打开了;第二种方法,在Windows文件管理器中,选中要打开的py程序文件,在右键菜单中进入“打开方式”,选择“记事本”即可。
原文:三大神器助力Python开发-Python环境搭建(一)

    推荐阅读