本篇是关于py2.7.9-docs的FAQ.pdf中关于python编译的问题“3.13 Can Python be compiled to machine code, C or some other language?”

python不容易被转化为机器码。几个项目可以证明,它可以转换为机器码,但速度仅提高很少(2倍)。

在内部,python源代码总是被转换成字节码,然后通过python虚拟机去执行。为了避免重复地解析和转换很少改变的模块,这种字节码被写到了一个.pyc文件。该pyc文件只有在对应的py文件改变后,才会重新的进行解析py文件并转换成字节码。

pyc文件被加载后,执行它的字节码和执行py文件明码没有性能差异。唯一的区别是加载(import) pyc文件快于加载py文件(因为还要解析并转换为字节码)。

也就是说,预编译版本.pyc文件的存在改善了Python脚本的启动时间,不影响运行时间。如果愿意可以手工使用compileall模块将py文件转换为pyc文件。

注意,python执行的主程序脚本不会被(自动)转换到pyc文件。主程序脚本也同样会被转换为字节码,但是不会存储在pyc文件中。主程序(启动文件)运行,会加载(import)其他的模块,这时其他的模块所在路径下会自动生成对应名称的pyc文件,但是该启动文件不会生成pyc。究其原因,大概是主模块一般不会被其他模块导入,pyc文件的优势(被导入时速度快)不会凸显出来。而且相对较小,即使被导入,也不会造成大的速度消耗。

下面是手工测试的一个场景:

同一个目录下创建两个文件,file1.py file2.py,并且在file2中导入file1#file1.py

#coding:utf-8

a = 5

#file2.py

#coding:utf-8

import file1

下面运行file2后,发现该目录下多出了一个file1.pyc文件。

再次运行file2后,发现file1.pyc文件的修改时间是没有变化的。

修改file1.py文件,比如将a = 5改成 a = 6,保存后运行file2,发现file1.pyc的修改时间变化了

上面的实例即证明了上述的说法,下面简单使用下compileall模块:

我们进入cmd,转入上面实例代码所在的目录,然后进入python解释器,执行:In [1]: import compileall

In [2]: compileall.compile_

compileall.compile_dir  compileall.compile_file compileall.compile_path

In [2]: compileall.compile_file('file2.py')

Compiling file2.py ...

Out[2]: 1

In [3]: compileall.compile_dir('./')

Listing ./ ...

Compiling ./file1.py ...

Out[3]: 1

In [4]:

python编译为机器码_Python FAQ2-python代码编译问题相关推荐

  1. origin python控制台怎么用_python如何使用代码运行助手

    python代码运行助手是能在网页上运行python语言的工具.因为python的运行环境在很多教程里都是用dos的,黑乎乎的界面看的有点简陋,所以出了这python代码运行助手,作为ide. 实际上 ...

  2. python实现远程登录_python远程登录代码

    在 python 中有一个 telnetlib,它的作用就是建立一个通到主机的 telnet连线实体, 然后向主机传送命令 (就像用键盘输入一样 )并从该连线接收数据.利用它, 我们可以把示范 1的所 ...

  3. python基础主要内容_python基础—python的介绍

    编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快; 而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以 ...

  4. python作者龟叔_Python基础 — Python简介

    序言:未来是数据的世界,而python 是一门可以高效简洁处理数据的语言,博主打算花一些时间完成python学习的从0到1.以此相关系列博客作为一个记录. 1. Python简介 Python的发音与 ...

  5. python字符串换行连接_python入门 python字符串换行显示、字符串太长\连接多行

    #coding:utf-8 #/usr/bin/python """ 2018-11-03 dinghanhua 缩进 换行 """ &qu ...

  6. python 等号报错_Python学习----Python基础

    Python基础 一.数据类型和变量 1.在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量. 例如: a =520# a是整数prin ...

  7. python多线程结束线程_Python线程– Python多线程

    python多线程结束线程 Python threading module is used to implement multithreading in python programs. In thi ...

  8. python等号语法错误_Python干货:代码编写规范

    本章节我们来讲述一下Python的编码规范,通过详细对代码编写规则以及命名规范等进行介绍. 1.编写规则 Python采用PEP 8 的编码规范,接下来会讲解一些我们在学习Python过程应该严格遵守 ...

  9. python找水仙花数_Python一句代码实现找出所有水仙花数的方法

    水仙花数是指一个 3位正整数,它的每个位上的数字的 3 次幂之和等于它本身.(例如:1^3 + 5^3+ 3^3 = 153) 下面用一句代码实现找出所有的水仙花数: 方法一: >>> ...

最新文章

  1. golang select channel 多路复用
  2. 数据库表的软硬关联_数据库容灾能力的探讨(一)
  3. linux系统服务详解 用于Linux系统服务优化
  4. cocos2d-x初探学习笔记(12)--图形绘制
  5. WPF实现拟物旋转按钮
  6. C#中 Convert与Parse的区别
  7. python绘制简单城市剪影图_Python之绘制个人足迹地图
  8. 前端 后端 MD5加盐
  9. pdf怎么编辑修改内容?以下方法你都知道吗
  10. ☆☆如何学习MATLAB☆☆
  11. python基础入门练习(字符串练习)
  12. 华为注册“花瓣编程”,释放了什么信号?
  13. ubuntu(Linux) 挂接小鹤音形 (基于IBus框架)
  14. 抵押贷款服务市场现状及未来发展趋势
  15. 童年记忆中的各种水果
  16. 微型计算机属于数字模拟混合计算机,2017年计算机基础题模拟试题「附答案」...
  17. 基于51单片机的智能火灾报警系统
  18. 如何合并多个excel中(excel表格样式都一样)
  19. Python图片压缩
  20. EDUP无线网卡在win10下无法安装驱动怎么解决?

热门文章

  1. 数据级并行--计算机体系结构
  2. git第一次提交代码至远程仓库-强制推送
  3. 东方卫视演得泰坦机器人_东方卫视《笑傲江湖4》今晚开播,郭德纲、陈赫过招喜剧新人,机器人脱口秀惊艳全场...
  4. matlab音频基频的提取,(620512681) 自相关基频提取算法的MATLAB实现
  5. 可以输入值的下拉框(select和input的组合使用)
  6. java main test_java调用main自动执行testng方法一
  7. android释放焦点_Android videoview抢占焦点的处理方法
  8. [Array]217.Contains Duplicate
  9. timestamp 字段
  10. 思科路由器debug基本操作和简单配置