一、Python到底是什么? (抄自 金角大王)

1. Python是一门解释型语言?

我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊!

为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。

2. 解释型语言和编译型语言

计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。

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

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

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

此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。

用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。

3. Python到底是什么

其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。

当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。

熟悉Java的同学可以想一下我们在命令行中如何执行一个Java的程序:

javac hello.java

java hello

只是我们在用Eclipse之类的IDE时,将这两部给融合成了一部而已。其实Python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言。

二、简述Python的运行过程

在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。

我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。

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

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

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

三、Python解释器

当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。

由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。

CPython

当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。

CPython是使用最广的Python解释器。

IPython

IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。

CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。

PyPy

PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。

绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。

Jython

Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

IronPython

IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。

转载于:https://www.cnblogs.com/tanrong/p/8459421.html

Python3 - 基础知识、基本了解相关推荐

  1. 01月26日【Python3 基础知识】

    01月26日[Python3 基础知识] 5.1 九宫格 5.2 函数入门 5.3 判断某天为某年的第几天 5.1 九宫格 import random x = 0 l = [1,2,3,4,5,6,7 ...

  2. Python3基础知识

    Python3基础知识 学习路线主要参照:菜鸟教程 和 Python教程2020版 一.Python简介 1. What is Python? Python 是一个高层次的结合了解释性.编译性.互动性 ...

  3. 整理了100道关于Python3基础知识的练习题,记得收藏

    100道关于Python3基础知识的练习题 实例1.数字组合 实例2.个税计算 实例3.完全平方数 实例4.这天第几天 实例5.三数排序 实例6.斐波那契数列 实例7.copy 实例8.九九乘法表 实 ...

  4. python3基础知识梳理(一)

    集合可以用来去除一些重复的数字 列表和元组的切片操作 注释:无法修改元组,是一中对列表的固定属性的保护措施 >>> number [1, 2, 3, 4, 5, 6, 7, 8, 9 ...

  5. python基础知识整理-Python3基础知识(一)

    1.使用类似三目运算符的方式来实现一个数的绝对值 if else # 输入一个数,然后利用一个语句求它的绝对值 num = int(input("请输入一个整数:")) num_a ...

  6. Python3基础知识之运算符

    题:今天学习python运算符,学完了回头看看与.net和java有什么异同. 目标:学习了解运算符,学会一般的应用. 相关知识: Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算 ...

  7. python3基础知识二

    一.数据类型运算相关细节 1.数字类型相关 对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可. int(x) 将x转换为一个整数. float(x) 将x转换到一个浮点数. ...

  8. python3基础知识一

    一.Python3 基本数据类型 Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建.当然也可以使用del语句删除一些对象.del var,del var_a, ...

  9. Python3 基础知识

    1.输入函数:input('输入提示信息'),获取用户输入,保存成一个字符串! 输出(打印)函数:print(*args, sep=' ', end='\n', file=None),"se ...

  10. python3基础知识复习 -- 虚拟环境(conda VS venv)

    虚拟环境(conda vs venv) conda创建虚拟环境 base环境 打开anaconda prompt或Linux/MacOS终端时,缺省环境为base. 创建: ​ conda creat ...

最新文章

  1. 根据二叉树的前序遍历和中序遍历重建二叉树
  2. Android开发之三种动画
  3. python—函数进阶-迭代器
  4. 10大机器学习算法速览,带你开启AI之旅
  5. 安装python有什么用_什么是Python Wheels?为什么要关心它?,python有什么用
  6. mysql技术分享--表分区实现
  7. 关于C语言中运算符优先级的一次错误
  8. WDA基础七:TABStrip
  9. mkdir命令的-p和-m
  10. 《态度》- 吴军 四十封启明家书 读后感
  11. JS基础-百度换肤案例
  12. 合唱队形(DP算法入门)
  13. 怎么批量删除 Excel 中第一个工作表或者其它指定的工作表?
  14. 苹果手机(IOS)蓝牙相关知识【配对后蓝牙设置界面i标识】【连接参数的限制】[只以地址作为识别依据]
  15. leetcode_529. 扫雷游戏 python
  16. Mac下CoreShell文件上传和下载配置
  17. 发言稿开场白范文_演讲稿开场白范文集锦
  18. Matlab/Simulink代码生成到dsp系列(一)基础配置
  19. xmlns是什么意思?
  20. BLOCK层代码分析(10)IO下发之IO下发函数总结

热门文章

  1. php点击按钮变文字,点击按钮文字变成input框,点击保存变成文字的实现代码
  2. QBC检索和本地SQL检索
  3. mybatis中resultMap的几种用法
  4. markdown快速创建表格及内容工具
  5. 数据库一键自动生成 Java 实体类和数据库文档
  6. mysql 唯一索引为null_mysql 中存在null跟空时创建唯一索引_mysql
  7. 网上五花八门的单片机教程,到底应该怎么整理学习过程
  8. php上搭建dvwa,使用phpstudy在windows上搭建DVWA
  9. 【渝粤教育】电大中专电商运营实操 (16)作业 题库
  10. 操作系统原理(六)设备管理