【思维导图】在pycharm 上运行代码需要了解的(解释器python interpreter)篇

it2025-04-07  18

Python的Python解释器:

 dis.dis(loop) o def loop(): odis.dis(loop) 用Python写Python解释器有缺点也有优点。 o最大的缺点就是运行速度 在Byterun中执行代码比在CPython中要慢得多。 Byterun oByterun是一个用python写的Python解释器。 o,Byterun被设计用于学习项目。 所以速度对我们来说并不重要。 最大的好处就是可以仅仅实现解释器,而不用担心云信时部分,特别是对象系统。 oByterun容易理解,特别是用高级别语言来实现,这使得很多人阅读起来都很简单。 o有4种类型的对象: 虚拟机对象: 用于控制最高层次的结构,特别是帧的调用栈,并且包含了指令到操作的映射。这是一个比之前解释器更复杂的版本 帧对象: 每个帧实例都有一个代码对象并且管理一些其他必要的状态位,特别是全局和本地命名空间,调用帧的引用,以及指令执行的最后一个字节码 函数类: 被用于真正的Python函数中。回想一下,调用一个函数会在解释器上创建一个新的帧。我们实现Function来控制创建新的帧 块类: 它只是包装了块的3个属性。(块的具体实现不是Python解释器的重点,所以我们不会在这上面花太多的时间,但它们被包含在内所以ByteRun可以运行真正的Python代码) CPython oCPython就是用C语言写的并且CPython做了认真的优化。 python解释器是如何工作的? oPython解释器是一个虚拟机,是一个模拟真实计算机的软件。 这个虚拟机是一个栈机器; 它操作几个栈来实现操作(这和寄存器机器从内存位置去读和写不同) oPython解释器是一个字节解释器,它的输入是被称作为字节码的指令集。 当你写Python的时候,词法分析器,语法分析器和编译器会生成代码对象让解释器去工作。 o每一个代码对象包含了待操作的指令集也就是字节码,再加上解释器需要的其他信息。 o字节码是Python代码的一个中间层:它表示了你按照解释器能够理解的方式来写源代码。 o这和汇编语言在C语言以及硬件之间作为中间表示的方式是类同的。 在解释器完成之前,python还有三个步骤需要执行: o词法分析, o语法解释, o编译。 一个轻型的解释器: o为了说明更具体,让我们从一个小解释器开始。 这个解释器只能做加法运算,并且只能理解3个指令。 所有代码的执行都包含了这3个指令的不同组合方式。 3个指令如下: LOAD_VALUE oLOAD_VALUE指令告诉解释器将一个数字进栈,但是单靠指令指出是哪一个数字。  • ADD_TWO_VALUES o对于第三个指令:ADD_TWO_VALUES 将会让2个数字出栈并且相加,然后将结果进栈。  • PRINT_ANSWER o假设7+5生成这样的指令集: 每一个指令都需要额外的信息来告诉解释器去哪装载数字。 所以我们的指令集有两部分:指令本身,加上指令需要的信息,告诉解释器从哪里去找到数字装载。 oPython解释器是一个栈机器,所以必须操作栈去完成2个数的加法。 解释器将从第一个指令LOAD_VALUE开始,然后将第一个数进栈。 接下来第二个数字进栈。 最后将结果出栈打印出来。 总结 oByterun 是一个比 CPython 容易理解的简洁的 Python 解释器。 oByterun 复制了 CPython 的主要结构: 一个基于栈的解释器对称之为字节码的指令集进行操作,它们顺序执行或在指令间跳转,向栈中压入和从中弹出数据。 o解释器随着函数和生成器的调用和返回,动态的创建、销毁帧,并在帧之间跳转。 oByterun 也有着和真正解释器一样的限制: 因为 Python 使用动态类型,解释器必须在运行时决定指令的正确行为。 Pycharm配置(1)——解释器(interpreter) o什么是解释器 Python的解释器就是Python.exe 是用来解释运行你编写的Python代码的 我们下载的Python(无论是2版本,还是3版本)其实自带解释器和编译器, 可以直接在命令行敲入代码,或者写一个文本,然后调用Python的解释器来执行也可以 Pycharm则是一个IDE (主要是让我们编写程序更加方便,或者说看起来更加简单,不需要用文本或在dos窗口编写代码), 但是Pycharm是不带Python解释器的,所以你要在安装 o(2)虚拟与基本解释器是否同步? 虚拟环境 这里的虚拟解释器在我理解来看,其实和缓存差不多,将要用到的东西放到项目文件夹中,用到的时候,直接调用邻近的,这样速度快,如果没有了,再去原解释器(D盘中),寻找需要的东西。 其实是起到隔离不同版本的Python的效果,virtualenv和conda是两种不同的虚拟隔离环境 不同步的 我在D盘的Python中安装了numpy模块,但是用虚拟解释器依然报错, 只有在虚拟解释器(也就是你解释器的环境下,执行pip install才可以),再次更新一下,两者虽然是不同步的, 但是更新下载的时候,只要D盘根解释器已经下载过了,那么虚拟环境中,就不需要联网下载了,可以直接复制D盘的模块

一个轻型的解释器:

Pycharm则是一个IDE

假设7+5生成这样的指令集:

(2)虚拟与基本解释器是否同步?

def loop():

dis.dis(loop)

参考文献:

https://blog.csdn.net/yuangan1529/article/details/80800411https://www.cnblogs.com/zhanghongfeng/p/10096735.html
最新回复(0)