《Python学习手册 第五版》 -第2章 Python如何运行程序
第二章主要讲解了Python的运行机制,
在开始之前,需要明确以下几点
因为《Python学习手册》这本书是面向市场很多人的,既然有很多人,就有很多不一样的需求和使用情况,这本书涵盖Python2.X和Python3.X两个版本的讲解,也涉及到Linux、Mac OS系统、Windows系统等不同的操作系统,本人学习不是为了大而全,而是单点突破,深入了解,所以后续的所有笔记内容会依以下情况进行,不再单独说明
1、使用Window 10操作系统
2、Python环境使用Python 3.7.2版本(如下截图):
因为《Python学习手册》第五版的英文版是2013年出版,当时最新的Python版本是3.3.0,截止到现在2019年12月,Python最新版本3.8.0
3、运行Python的方式:DOS命令、Eclipse集成环境
接下来回归本章的重点,Python的运行机制:文章中有一个图,有书的可以参考,以下是我理解后的步骤,通过文字即可了解
步骤1、源代码文件:就是我们写出来的程序文件,以“.py"格式存储
步骤2、编译:Python会对源代码进行编译
步骤3、编译后的结果是字节码文件:字节码文件会以”.pyc"的格式存在
步骤4、Python虚拟机(PVM)运行字节码
以上4各步骤就是Python核心的运行机制,通过这四个步骤,会有很多延伸出来的问题
1、平时写Python程序,然后直接运行即可,没有感觉有这么多步骤啊?
答:步骤1是我们要做的,所以是能很明显感受到的,步骤2~4,是Python程序后台自动完成的,不需要人为干预,所以对程序员来说是隐藏的,步骤2~4合在一起,有时候也会称为“Python解释器”,如果听到这个词,就是指的步骤2~4,编译+执行
2、字节码是什么?是机器的那种二进制代码吗?
答:不是,两者是不一样的,字节码是Python特有的一种表现形式(学过Java的人都知道,这一点和Java比较类似),二进制代码是机器可以直接读取的,而字节码是机器无法自己读取的,中间还需要PVM的运行,这里要特别说明一点,如果是在交互式命令行中输入,是不需要字节码的,只有运行单独的“.py”文件时才会有字节码
3、编译后的字节码文件在哪里?我们能看吗?
答:一般来说会与源代码文件在同一个文件夹,可以打开看,我之前用txt打开过,但是看到的都是乱码,完全无法看懂,和源代码差异很大
4、Python源代码直接运行不就可以吗?为什么中间还需要编译和PVM,岂不是很繁琐?
答:说一个很简单的例子,苹果手机和安卓手机,同样的一款App是需要两种安装程序的,这个大家都理解,就是苹果手机上的app安装软件是不能直接安装在安卓手机上,安卓手机的软件不能直接安装在苹果手机上,为什么?因为两者的手机系统不一样,
同样的逻辑,我们虽然经常使用的是windows系统,但是电脑操作系统还有linux、Mac OS等,也就是说,如果需要一款软件,运行在不同的操作系统上,那你就需要编辑不同版本的软件,因为不同的操作系统,软件的实现方式是不一样的,为了避免这种重复性的工作,使得一个程序文件可以在不同系统中运行,Python(还有Java)就使用了这种编译+PVM的形式,这种形式的好处就是平台无关性,也叫跨平台,
那什么叫平台无关性呢?就是一个Python程序,可以在不同的系统运行,也就是只写一次代码,可以处处运行(这个也是Java的优点),
这种形式为什么可以实现跨平台运行呢?在写Python程序前,需要安装Python的运行环境,根据每个人不同的操作系统,下载适应的Python版本,编译后的字节码是通过PVM运行的,而PVM的实现是根据机器语言实现的,所以编译后的字节码就可以在任何有PVM的环境中运行Python程序,这样程序就不再依赖系统,就可以一处编译后,拿到各处平台系统运行
本章的重点是Python的运行机制,此外本书作者还介绍了Python语言的5中主要实现
1、Cpython:标准Python,也是本书作者采用的实现方式
2、Jython:基于Java的Python
3、IronPyhon:基于.Net de Python
4、Stackless:注重并发的Python
5、PyPy:注重速度的Python
此外还有讲解Cython、Shed Skin、Psyco等,因为本人是初学,所以对这些不甚理解,就不多说,后面有了解了再单独展开说,如果有对此感兴趣的,可自行百度了解