一、解释型语言和编译型语言

解释性语言:在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。

编译型语言:没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。

总结:因为编译型语言在程序运行之前就已经对程序做出了"翻译",所以在运行时就少掉了"翻译"的过程,所以效率比较高。但是我们也不能一概而论,一些解释性语言也可以通过解释器的优化来对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。

     此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释性和编译型这两种。用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。

  解释型:当程序运行时,将代码逐行解释成二进制,再运行。

    优点:排错快,开发效率高,可以跨平台。

    缺点:执行效率相对低。

    典型:python...

  编译型:将代码一次性全部编译成二进制,然后再运行。

    缺点:排错慢,开发效率低,不能跨平台。

    优点:执行效率高。

    典型:C...

二、Python的运行过程

  PyCodeObject和pyc文件

PyCodeObject是Python编译器真正编译成的结果。

当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。

当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。

所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

pyc:预编译后的一个字节码文件,不是机器码

最新文章

  1. [.net core]简介(转)
  2. Differences between INDEX, PRIMARY, UNIQUE, FULLTEXT in MySQL?
  3. iOS 16进制字符串转换成int十进制
  4. LitePal + Gson + Volley的ORM框架尝试方案
  5. 四、saltstack如何管理对象?
  6. SpringMVC深入探究(1)——DispatcherServlet与初始化主线
  7. openlayers加载百度地图
  8. 26、Jquery 基础
  9. 实例化讲解 RunLoop
  10. 西装定制平台Indochino获$1350万B轮融资 - 国际B2C - 亿邦动力网
  11. KindEditor放在包含模版页的页面里不显示解决方案
  12. [C++程序设计]函数模板
  13. java设计模式--创建模式--建造者模式
  14. MyEclipse2014安装图解
  15. Volley的基本使用
  16. 学生管理系统(Java Swing JDBC MySQL)
  17. java web 方面
  18. response对象、转发、重定向
  19. CLR(Common Language Runtime) 公共语言运行库
  20. PHP源码编译安装

热门文章

  1. DocumentEvent事件的应用
  2. graph easy绘制ascii简易流程图
  3. html常用meat头
  4. P4389 付公主的背包
  5. UVA11922 Permutation Transformer
  6. springmvc学习之jdk版本,tomcat版本,spring版本
  7. LINQ to Entities does not recognize the method 'System.DateTime AddDays(Double)' method, and this method cannot be translated into a store expression.
  8. jmeter接口自动化测试
  9. Pandas 基础(15) - date_range 和 asfreq
  10. OceanBase迁移服务:向分布式架构升级的直接路径