人生苦短,我用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. 复选框、单选框样式自定义(https://www.cnblogs.com/freedom-feng/p/11346396.html)

    复选框.单选框样式自定义(https://www.cnblogs.com/freedom-feng/p/11346396.html)复选框html内容如下:<input type="c ...

  2. Python爬虫帮你打包下载所有抖音好听的背景音乐,还不快收藏一起听歌【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  3. deepin系统安装pip

    Deepin系统安装pip Deepin系统通常自带了两个版本的python,一个python2,一个python3.可以在命令行输入这两个命令测试下是不是有两个版本,都是有两个版本都存在的情况下,安 ...

  4. Java修炼——文件字节输入输出流复制和缓冲流复制

    一:文件字节输入输出流复制 首先明确数据源和目的文件,然后就是"中转站",最后就是关闭 package com.bjsxt.ioproject; import java.io.Fi ...

  5. JQuery中操作元素的属性_对象属性

    我们主要是通过attr去获取元素的属性: 看body内容: <body> <p> 账号:<input type="text" id="una ...

  6. CF595 Div31249A,1249B1,1249B2,1249C1,1249C2,1249D1,1249D2,1249E,1249F)题解

    A:水题,先排序,有相连的输出2,否则输出1. #include<bits/stdc++.h> using namespace std; #define pii pair<int,i ...

  7. CSUOJ1811 Tree Intersection (启发式合并)

    Bobo has a tree with n vertices numbered by 1,2,…,n and (n-1) edges. The i-th vertex has color c i, ...

  8. HDU-1754 A - I Hate It

    很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有 ...

  9. A.Sweet Problem

    题目:甜蜜的问题 题意:你有三堆糖果:红色,绿色,蓝色 第一堆有r个糖果,第二堆有g个糖果,第三堆有b个糖果 每天都可以吃两个不同颜色的糖果,找出可以吃糖果的最大天数 分析:先排下序,如果最大堆大于等 ...

  10. rails 中各种去重查询操作

    Table.select("DISTINCT name").map(&:name) : DISTINCT name去重查询name Table.active.map{|x| ...