当前位置: 首页 > 面试题库 >

Python字节码如何在CPython中运行?

季小云
2023-03-14
问题内容

我试图了解Python的工作原理(因为我一直都在使用它!)。据我了解,当您运行python
script.py之类的脚本时,该脚本将转换为字节码,然后解释器/ VM /
CPython(实际上只是一个C程序)读取python字节码并相应地执行该程序。

该字节码如何读入?它类似于在C语言中读取文本文件的方式吗?我不确定Python代码如何转换为机器代码。是否确实是Python解释器(CLI中的python命令)只是一个预编译的C程序,该程序已经转换为机器代码,然后将python字节码文件放入该程序中?换句话说,我的Python程序是否从未真正转换为机器代码?python解释器已经存在于机器代码中了,所以我的脚本就不必了吗?


问题答案:

是的,您的理解是正确的。在CPython解释器中,基本上(非常基本上)有一个巨大的switch语句,上面写着“如果当前操作码是这样,那么就这样做”。

http://hg.python.org/cpython/file/3.3/Python/ceval.c#l790

其他实现(例如Pypy)具有JIT编译功能,即它们可以将Python即时转换为机器代码。



 类似资料:
  • 问题内容: 在CPython的上下文中,我并没有真正理解“字节码解释器”的概念。有人可以说明整个情况吗? 这是否意味着CPython将编译并执行pyc文件(字节码文件?)。那么什么将py文件编译为pyc文件呢?而且Jython与CPython有何不同(除了它们以不同的语言实现)。 我还在某处读到Python是C ++的解释。这个对吗?那是什么意思呢? 我对Python还是很陌生,所以请原谅我这个愚

  • 问题内容: 关于Python和CPython (Jython,IronPython) 的所有这些大惊小怪,我不明白: python.org提到CPython是: Python的“传统”实现(绰号为CPython) 另一个堆栈溢出问题提到: CPython是Python的默认字节码解释器,它是用C编写的。 老实说,我并没有理解这两种解释的实际含义,但是我认为, 如果我使用CPython,这意味着当我

  • 问题内容: 我一直在尝试学习如何在场景下实现CPython。Python是高级的,这很好,但是我不喜欢将其视为黑匣子。 考虑到这一点,元组如何实现?我已经看过源代码(tupleobject.c),但它已经超出我的头了。 我看到的和,什么是节约型和“自由列表”?(长度为20/21或2000/2001的元组之间会有性能差异吗?是什么导致了最大元组长度的强制执行?) 问题答案: 请注意,此答案中的所有内

  • 问题内容: 我正在用Java为具有特定脚本功能的领域特定语言编写解释器。我已经实现了解析器,现在需要做一个后端。为此,我正在考虑编写自己的解释器(使用抽象语法树或某些自定义字节码)或目标JVM(在运行时发出并执行Java字节码)。 对此领域有更多经验的人可以说针对JVM的方法可行吗?您建议使用哪些库来发出Java字节码? 问题答案: 这是使用ObjectWeb ASM(我推荐的一个库)构成的一个有

  • 问题内容: PHP中有多字节字符串函数来处理多字节字符串(例如:CJK脚本)。例如,我想通过使用python中的函数来计算一个多字节字符串中有多少个字母,但是它返回的结果不准确(即该字符串中的字节数) PHP中有像mb_strlen这样的软件包或函数吗? 问题答案: 使用Unicode字符串: 注意字符串前面。 要将字节字符串转换为Unicode,请使用:

  • 问题内容: 我真的很喜欢使用sublime text 2编写Python代码,但是,每当我尝试运行具有输入的脚本时,sublime text控制台都会报告错误。因此,我决定尝试,但是我已经搜索了几个小时,却没有找到如何运行Python代码的方法……你们能帮我吗? 我想像使用sublime文本控制台()一样运行代码。我真正想知道的是是否有一种方法可以做到这一点。 先感谢您! 问题答案: 来自http