人生苦短,我用Python。

作为一个开发人员,如何写代码是必须要知道的,代码如何运行也是有必要了解的。通过了解代码如何运行,可指导我们写出效率更高的代码。下午看了《Python学习手册》第二章,了解了一些比较有趣的东西,因此做个总结。

let's do it

Python解释器

提到Python印象大多是编程语言。其实Python是一个名为解释器的软件包,通俗一点解释器就是将你的代码解释给计算机。

官方点,解释器是代码与机器的计算机硬件之间的软件逻辑层。

当安装Python后,他会生成一些组件:至少包括一个解释器和一套支持库。

根据使用情况不同,解释器可能采取可执行程序的形式,或做为链接到另一个程序的库

根据版本不同,解释器本身可以用 C程序实现,或一些Java类实现。

无论如何Python代码必须在解释器上运行

  程序执行

   惯例,Python文件都是以.py结尾, 但是从技术上来讲,这种命名方案在被“导入”时才是必须的。

当Python运行脚本时,在代码运行前还要做一些工作。

  1. 将源码编译成字节码(不是机器码)
  2. 将编译的字节码放到Python虚拟机(PVM)中运行

字节码编译

编译是一种简单的翻译步骤,字节码是一种低级的,与平台无关的表现形式(可移植性)这些字节码可以提高执行速度,比源码快得多。

如果Python进程有写入权限,那么他会把字节码保存为一个.pyc为扩展名的文件,3.2之后版本将其放在__pycache__的子目录中,方便下次PVM跳过编译直接取用,没有写入权限的话运行程序还是会翻译成字节码,只不过放内存,程序杀死之后就被丢弃。

Python会检测源文件是否改变,没变就直接用上次的.pyc。

对于Python版本,.pyc的文件名中包含版本,因此可区别不同版本编译的.pyc

.pyc文件起到加速启动的作用,类似于操作系统的缓存,只不过是执行了一部分再缓存。

Python虚拟机(PVM)

PVM用来执行字节码文件。 但实际上它不是一个独立的程序,不用安装,

本质其实就是一个迭代执行字节码指令的大循环,一步步的完成操作。期间会将字节码编译成二进制码。

因此,最终的效果是纯Python代码执行速度介于传统编译语言和传统解释性语言之间(cache的作用)

对开发的意义:编译和执行的的环境是同一个,。因此编译器总在运行时出现,这就使Python程序在运行时去构建和执行另一个Python程序成为可能


执行模型的变体

除了传统的实现模式,Python还有很多实现,简单说一下

  • CPython:标准Python  

由可移植的ANSI C语言代码编写而成,一般来说用的都是这个

特点:运行速度最快、最完整、最新、最健全。上面的图便是CPython的运行时体系结构。

  • Jython:基于Java的Python

与Java进行集成

  • IronPython:基于.Net的Python
  • Stackless:注重并发的Python
  • PyPy:注重速度的Python        比较有潜力,特别是在CPU密集型代码,计算领域(AI)

随着Python的持续升温,相信以后更加高效的执行模型会出来。


  

冻结二进制文件

最后记录下这个,就是生成的可执行文件(独立的二进制可执行), 有种打包发布的意思

有许多系统可以生成随平台特性变化的冻结二进制文件

冻结二进制文件其实就是将字节码和PVM混合在一起形成的一个独立组件。由于代码嵌入在冻结二进制文件中,对于接收者来说,代码是看不见的。

这样便实现的单文件的封装,终端用户都不用安装Python就可以运行这些程序。

 

 如何运行大概知道了。
 学习尚浅,有错误或不当之处还请指正。

Python如何运行程序的更多相关文章

  1. 第二章 python如何运行程序

    一.python解释器介绍 Python解释器是一种让程序运行起来的程序.实际上,解释器是代码与机器的计算机硬件之间的软件逻辑层.当Python包安装在机器上后,它包含了一些最小化的组件:一个解释器和 ...

  2. 《Python学习手册 第五版》 -第2章 Python如何运行程序

    第二章主要讲解了Python的运行机制, 在开始之前,需要明确以下几点 因为<Python学习手册>这本书是面向市场很多人的,既然有很多人,就有很多不一样的需求和使用情况,这本书涵盖Pyt ...

  3. [TimLinux] Python如何运行程序

    1. Python解释器安装 访问官方网站:https://www.python.org/, 在首页标签中找到“Downloads”,根据不同的操作系统,选择相应的下载源文件即可. 2. 源码安装 在 ...

  4. 在Python解释器运行程序

    在解释器中运行  ***.py文件的方法:使用import添加模块 ***.py,然后调用 ***.py中的函数 例:在zoo.py中定义hours函数 运行方法: >>> impo ...

  5. VSCode的Python扩展下程序运行的几种方式与环境变量管理

    在VSCode中编写Python程序时,由于有些地方要使用环境变量,但是发现设置的环境变量有时不起作用,花了点时间研究了一下,过程不表,直接说结论. 首先,环境变量的设置,Python扩展中有三种方式 ...

  6. day2 编程语言介绍、Python运行程序的两种方式、变量

    一 编程语言介绍 1. 机器语言 用计算机能理解的二进制指令直接编写程序,直接控制硬件 2. 汇编语言 用英文标签取代二进制指令编写程序,本质也是直接控制硬件 3. 高级语言 用人能理解的表达方式去编 ...

  7. python介绍,计算机核心基础,与运行程序有关的三大核心硬件,操作系统

    python介绍,计算机核心基础,与运行程序有关的三大核心硬件,操作系统 引子 python是什么? 什么是编程语言?为何要有编程语言? 什么是编程?什么是程序?什么是进程?为何要编程? 计算机基础 ...

  8. Python Virtualenv运行Django环境配置

    系统: RHEL6.5 版本说明: Python-3.5.0 Django-1.10.4 virtualenv:为每个项目建立不同的/独立的Python环境,你将为每个项目安装所有需要的软件包到它们各 ...

  9. 简明python教程 --C++程序员的视角(一):数值类型、字符串、运算符和控制流

    最初的步骤 Python是大小写敏感的 任何在#符号右面的内容都是注释 >>> help('print')在“print”上使用引号,那样Python就可以理解我是希望获取关于“pr ...

随机推荐

  1. 华为鲁勇:5G+云+AI三大核心引擎将驱动广州数字经济发展

    [摘要] 华为云将携手广州政企,全面释放 5G+云+AI新动能,推动广州步入高质量发展新阶段. [中国,广州] 广州是一座多样化的城市,在历史上被誉为千年的商都,现在,广州也在持续的开放.融合.与时俱 ...

  2. HC大会,华为联合合作伙伴发布一站式物联网IoT开发工具小熊派BearPi

    传统的物联网产品开发步骤复杂,涉及硬件开发.软件开发.云端开发等众多流程.而且产品的开发周期长.开发成本高.产品稳定性不佳.维护成本高.而物联网设备本身市场竞争激烈,价格低,设备更新迭代快,所以在保证 ...

  3. linux中RabbitMQ安装教程

    linux中RabbitMQ安装教程 在做一个微服务项目时候用到消息队列,于是深入了解了消息队列知识,并在linux上安装了Rabbitmq,本博客介绍Rabbitmq的安装教程,想要深入了解消息队列 ...

  4. Pandas学习(三)——NBA球员薪资分析

    欢迎加入python学习交流群 667279387 学习笔记汇总 Pandas学习(一)–数据的导入 pandas学习(二)–双色球数据分析 pandas学习(三)–NAB球员薪资分析 pandas学 ...

  5. OA思维导图(第一次画)

  6. 【转载】Dockerfile文件详解

    什么是dockerfile? Dockerfile是一个包含用于组合映像的命令的文本文档.可以使用在命令行中调用任何命令. Docker通过读取Dockerfile中的指令自动生成映像. docker ...

  7. HDU2833-WuKong(求不同起点,终点最短路的交点最多数量)

    Liyuan wanted to rewrite the famous book "Journey to the West" ("Xi You Ji" in C ...

  8. python sympy evalf()函数

    SymPy是一个符号计算的Python库.它的目标是成为一个全功能的计算机代数系统,同时保持代码简 洁.易于理解和扩展.它完全由Python写成,不依赖于外部库.SymPy支持符号计算.高精度计算.模 ...

  9. 工具类中注入service和dao

    今天编写了个工具类需要用到service成和dao层的代码 如下: //第一步:需要将工具类注入到容器中 @Component public class RuleUtils { ​ //第二部注入 @ ...

  10. 【Vuejs】350- 学习 Vue 源码的必要知识储备

    前言 我最近在写 Vue 进阶的内容.在这个过程中,有些人问我看 Vue 源码需要有哪些准备吗?所以也就有了这篇计划之外的文章. 当你想学习 Vue 源码的时候,需要有扎实的 JavaScript 基 ...