Python如何运行程序
人生苦短,我用Python。
作为一个开发人员,如何写代码是必须要知道的,代码如何运行也是有必要了解的。通过了解代码如何运行,可指导我们写出效率更高的代码。下午看了《Python学习手册》第二章,了解了一些比较有趣的东西,因此做个总结。
let's do it
Python解释器
提到Python印象大多是编程语言。其实Python是一个名为解释器的软件包,通俗一点解释器就是将你的代码解释给计算机。
官方点,解释器是代码与机器的计算机硬件之间的软件逻辑层。
当安装Python后,他会生成一些组件:至少包括一个解释器和一套支持库。
根据使用情况不同,解释器可能采取可执行程序的形式,或做为链接到另一个程序的库
根据版本不同,解释器本身可以用 C程序实现,或一些Java类实现。
无论如何Python代码必须在解释器上运行
程序执行
惯例,Python文件都是以.py结尾, 但是从技术上来讲,这种命名方案在被“导入”时才是必须的。
当Python运行脚本时,在代码运行前还要做一些工作。
- 将源码编译成字节码(不是机器码)
- 将编译的字节码放到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如何运行程序的更多相关文章
- 第二章 python如何运行程序
一.python解释器介绍 Python解释器是一种让程序运行起来的程序.实际上,解释器是代码与机器的计算机硬件之间的软件逻辑层.当Python包安装在机器上后,它包含了一些最小化的组件:一个解释器和 ...
- 《Python学习手册 第五版》 -第2章 Python如何运行程序
第二章主要讲解了Python的运行机制, 在开始之前,需要明确以下几点 因为<Python学习手册>这本书是面向市场很多人的,既然有很多人,就有很多不一样的需求和使用情况,这本书涵盖Pyt ...
- [TimLinux] Python如何运行程序
1. Python解释器安装 访问官方网站:https://www.python.org/, 在首页标签中找到“Downloads”,根据不同的操作系统,选择相应的下载源文件即可. 2. 源码安装 在 ...
- 在Python解释器运行程序
在解释器中运行 ***.py文件的方法:使用import添加模块 ***.py,然后调用 ***.py中的函数 例:在zoo.py中定义hours函数 运行方法: >>> impo ...
- VSCode的Python扩展下程序运行的几种方式与环境变量管理
在VSCode中编写Python程序时,由于有些地方要使用环境变量,但是发现设置的环境变量有时不起作用,花了点时间研究了一下,过程不表,直接说结论. 首先,环境变量的设置,Python扩展中有三种方式 ...
- day2 编程语言介绍、Python运行程序的两种方式、变量
一 编程语言介绍 1. 机器语言 用计算机能理解的二进制指令直接编写程序,直接控制硬件 2. 汇编语言 用英文标签取代二进制指令编写程序,本质也是直接控制硬件 3. 高级语言 用人能理解的表达方式去编 ...
- python介绍,计算机核心基础,与运行程序有关的三大核心硬件,操作系统
python介绍,计算机核心基础,与运行程序有关的三大核心硬件,操作系统 引子 python是什么? 什么是编程语言?为何要有编程语言? 什么是编程?什么是程序?什么是进程?为何要编程? 计算机基础 ...
- Python Virtualenv运行Django环境配置
系统: RHEL6.5 版本说明: Python-3.5.0 Django-1.10.4 virtualenv:为每个项目建立不同的/独立的Python环境,你将为每个项目安装所有需要的软件包到它们各 ...
- 简明python教程 --C++程序员的视角(一):数值类型、字符串、运算符和控制流
最初的步骤 Python是大小写敏感的 任何在#符号右面的内容都是注释 >>> help('print')在“print”上使用引号,那样Python就可以理解我是希望获取关于“pr ...
随机推荐
- 写一个umi插件 自动生成代码 解放cv的双手
引言 最近在写一个中台项目,使用的react的umi框架. 各种增删改查.基本是列表页 新建页 详情页这种页面 为了避免不必要的简单重复(主要是想偷懒) 于是想去实现自己的一个代码生成器 探索 首先, ...
- [TimLinux] myblog 创建第一个app
1. 项目结构 项目地址:https://github.com/timscm/myblog.git 2. 启动项目 通过pycharm启动项目,进入调试模式: "D:\Program Fil ...
- python3如何随机生成大数据存储到指定excel文档里
本次主要采用的是python3的第三方库xlwt,来创建一个excel文件.具体步骤如下: 1.确认存储位置,文件命名跟随时间格式 2.封装写入格式 3.实现随机数列生成 4.定位行和列把随机数写入 ...
- Ceph 提供iSCSI存储
Tgtd+Ceph部署 一.yum安装tgt [root@c720181 ~]# yum --enablerepo=epel -y install scsi-target-utils libxslt ...
- [vue]数据来源
1.组件data函数return的数据 作用域是组件本身 可以在模板template及计算属性computed和方法methods中使用 2.父传子,props数据 来自父级:可以是写死的,或者是来自 ...
- 【React】393 深入了解React 渲染原理及性能优化
如今的前端,框架横行,出去面试问到框架是常有的事. 我比较常用React, 这里就写了一篇 React 基础原理的内容, 面试基本上也就问这些, 分享给大家. React 是什么 React是一个专注 ...
- 【Nodejs】326- 从零开发一个node命令行工具
本文由 IMWeb 社区授权转载自腾讯内部 KM 论坛.点击阅读原文查看 IMWeb 社区更多精彩文章. 什么是命令行工具? 命令行工具(Cmmand Line Interface)简称cli,顾名思 ...
- docker入门-镜像管理命令篇
一.下载.上传镜像 1:下载安装centos镜像 语法:docker [参数][镜像名称] [root@host1 ~]# docker pull centos Using default tag ...
- 2019年Spring核心知识点整理,看看你掌握了多少?
前言 如今做Java尤其是web几乎是避免不了和Spring打交道了,但是Spring是这样的大而全,新鲜名词不断产生,学起来给人一种凌乱的感觉,在这里总结一下,理顺头绪. Spring 概述 Spr ...
- 深入浅出分析 PriorityQueue
一.摘要 在前几篇文章中,咱们了解到,Queue 的实现类有 ArrayDeque.LinkedList.PriorityQueue. 在上一章节中,陆续的介绍到 ArrayDeque 和 Linke ...