一、字节码
1、字节码是什么。
python的源文件是以.py结尾的,不知你是否见过或者听说过以.pyc结尾的文件,它保存在__pycache__的文件夹中,这就是字节码。
2、字节码存在的作用。
python是解释性语言,它在运行时将源代码编译成一组虚拟机指令,并且Python 解释器是针对相应的虚拟机来实现的。为了避免每次运行程序时重新解析源代码,同时能提高运行的速度,那么这中间格式便存在了。
3、为什么要了解字节码。
- 理解python的运行模型可以帮助理解我们的代码,更好地优化我们的代码。
- 理解字节码可以帮助理解python相关的问题,比如为什么某些结构比其他结构运行速度更快。
- 理解面向栈的编程语言可以开拓我们的视野,丰富我们的知识。
二、CPython
1、CPython是什么。(来自维基百科:https://zh.wikipedia.org/wiki/CPython)
CPython是用C语言编写的python解释器,CPython是使用字节码的解释器,任何程序源代码在执行之前先要编译生成字节码。
CPython是使用一种基于栈的虚拟机,它完全面向栈数据结构。
2、CPython的类型。
- 调用栈:运行python程序的主要结构,每个当前活动的函数调用使用了一个叫“帧”的东西,每个函数调用推送一个新的帧到调用帧,并且在函数调用结束后销毁帧。
- 计算帧(数据帧):python函数运行的地方 ,运行的python代码大多推入这个栈,操作完成之后销毁它们。
- 块帧:python用于跟踪某些类型的数据结构,如循环、try/except块、with块,运行时这些块将会被推入栈中,运行完成之后销毁它们,但是continue/break会影响它们的正常执行。
三、dis模块(参考python官方文档)