第二章主要讲解了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等,因为本人是初学,所以对这些不甚理解,就不多说,后面有了解了再单独展开说,如果有对此感兴趣的,可自行百度了解

《Python学习手册 第五版》 -第2章 Python如何运行程序的更多相关文章

  1. 《Python学习手册 第五版》 -第13章 while循环和for循环

    上一章已经讲过if条件语句,这章重点是循环语句:while.for 本章的重点内容 1.while循环 1)一般形式 2)break.continue.pass和循环的else 2.for循环 1)一 ...

  2. 《Python学习手册 第五版》 -第12章 if测试和语法规则

    本章节的内容,主要讲解if语句,if语句是三大复合语句之一(其他两个是while和for),能处理编程中大多数逻辑运算 本章的重点内容如下: 1.if语句的基本形式(多路分支) 2.布尔表达式 3.i ...

  3. 《Python学习手册 第五版》 -第11章 赋值、表达式和打印

    上一章对Python的语句和语法已经进行了基本的说明,接下来就是每个章节的详细说明,本章的主要内容就是标题中涵盖的三点:赋值语句.表达式语句.打印语句 本章重点内容如下: 1.赋值语句 1)赋值语句的 ...

  4. 《Python学习手册 第五版》 -第10章 Python语句简介

    前面在开始讲解数据类型的时候,有说过Python的知识结构,在此重温一下 Python知识结构: 程序由模块组成 模块包含语句 语句包含表达式 表达式创建并处理对象 关于知识结构,前面已经说过我自己的 ...

  5. 自学笔记系列:《Python学习手册 第五版》 -写在开始之前

    今年双十一,在当当网上买了这本书,很厚很厚的一本书,大概有将近1700页左右,的确是一个“大工程”, 关于这本书的学习,我想采用一种博客的方式进行,既是写给自己,也想分享给每一个对Python学习感兴 ...

  6. 《Python学习手册 第五版》 -第14章 迭代和推导

    承接上一章for循环的讲解,迭代和推导,是对for循环的一种深入的探索和扩展 本章重点内容 1.迭代 1)什么是迭代?都有哪些分类 2)常规的使用方法 3)多遍迭代器VS单遍迭代器 2.列表推导 1) ...

  7. 《Python学习手册 第五版》 -第18章 参数

    在函数的定义和调用中,参数是使用最多喝最频繁的,本章内容就是围绕函数的参数进行讲解 本章重点内容如下: 1.参数的传递 1)不可变得参数传递 2)可变得参数传递 2.参数的匹配模式 1)位置次序:从左 ...

  8. 《Python学习手册 第五版》 -第15章 文档

    本章主要介绍Python中的文档,会通过多种方式来说明,如果查看Python自带文档和其他参考的资料 本章重点内容 1.#注释:源文件文档 2.dir函数:以列表显示对象中可用的属性 3.文档字符串 ...

  9. 《Python学习手册 第五版》 -第16章 函数基础

    前面的章节讲解的是一些基础数据类型.基本语句使用和一些文档查看的内容,这些都是一些基础,其实还谈不上入门,只有了解了函数,才算入门 函数是编程里面使用最多的也是最基本的程序结构, 本章重点内容 1.函 ...

  10. 《Python学习手册 第五版》 -第17章 作用域

    上一章的是函数的基础,因为函数在运用过程中,是可以嵌套的,函数中是会涉及到变量的,为了明确各自变量的使用范围,系统是有一套规则或者原则的,这就是作用域的概念 本章重点内容 1.作用域:作用域的概念 2 ...

随机推荐

  1. Win10删除桌面上的回收站、计算机、网络等图标

    解决方案: 桌面上鼠标右键,选择个性化 个性化窗口左边侧栏选择主题 移动至最下方点击"桌面图标设置"即可看到系统中的五个桌面图标

  2. 最全面的css布局

    1.定位 定位的概念就是它允许你定义一个元素相对于其他正常元素的位置,它应该出现在哪里,这里的其他元素可以是父元素,另一个元素甚至是浏览器窗口本身.还有就是浮动了,其实浮动并不完全算是定位,它的特性非 ...

  3. 低功耗蓝牙(BLE)——概念

    1. 种类 单模蓝牙:仅支持传统蓝牙和BLE(低功耗蓝牙)中的一种: 双模蓝牙:同时支持传统蓝牙和BLE(低功耗蓝牙). 2. 部署方案 3. 节点类型 根据蓝牙协议不同的协议层有不同的角色 1. S ...

  4. 集合下篇—Map和Set 源码分析

    Map Map不同于Collection集合,Map存放的是键值对,且键不能重复 1 .HashMap (底层是哈希表,Java中用链表的数组实现,存取顺序不一致) 这篇博客主要讲集合的,哈希表这样的 ...

  5. Vue中echarts的基本用法

    前言:同大多数的前端框架一样,先读官网的使用方法.学会基本使用后,在实例中找到自己想要demo.拿过来改一改,一个echarts图表就形成,毕竟人家做就是为了方便使用. 我是在vue中下面直接使用的e ...

  6. SPFA判负环模板

    void DFS_SPFA(int u){   if(flag) return; vis[u]=true;   for(int i=head[u];i;i=edges[i].nxt){   if(fl ...

  7. BFS - 求最短路径

    Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. ...

  8. 从网上下载DLL

    1,微软官网 2:https://www.zhaodll.com/ 3:http://www.dllzj.com/

  9. 阿望教你用vue写扫雷(超详细哦)

    前言 话说阿望还在大学时,某一天寝室突然停网了,于是和室友两人不约而同地打开了扫雷,比相同难度下谁更快找出全部的雷,玩得不亦乐乎,就这样,扫雷伴我们度过了断网的一周,是整整一周啊,不用上课的那种,可想 ...

  10. Java 中的等待唤醒机制透彻讲解

    线程的状态 首先了解一下什么是线程的状态,线程状态就是当线程被创建(new),并且启动(start)后,它不是一启动就进入了执行状态(run),也不是一直都处于执行状态. 这里说一下Java 的Thr ...