首页 > Python > 如果解释Python,什么是.pyc文件?

如果解释Python,什么是.pyc文件?

上一篇 下一篇

Python是一种解释型语言。但是为什么我的源目录包含被Windows标识为“编译的Python文件”的文件?.pyc

分割线

网友回答:

它们包含字节码,这是 Python 解释器将源代码编译到的字节码。然后,此代码由 Python 的虚拟机执行。

Python 的文档是这样解释定义的:

Python是一种解释型语言,而不是编译型语言,尽管由于字节码编译器的存在,

区别可能很模糊。
这意味着可以直接
运行源文件,而无需显式
创建然后
运行的可执行文件。

分割线

网友回答:

我已经明白
了Python是一种解释型语言……

这个流行的模因是不正确的,或者更确切地说,是建立在对(自然)语言水平的误解之上的:类似的错误是说“圣经是一本精装书”。让我解释一下这个比喻…

“圣经”是“一本书”,意思是一(实际的,被确定为)书籍;被确定为“圣经副本”的书籍应该有一些基本的共同点(内容,尽管即使是那些也可以使用不同的语言,具有不同的可接受的翻译,脚注和其他注释的水平)——然而,这些书完全允许在无数方面有所不同,而这些方面不是 考虑基本 — 装订类型、装订颜色、打印中使用的字体、插图(如果有)、宽可写边距与否、内置书签的数量和种类等。

很有可能,典型的圣经印刷确实是精装装订的——毕竟,这是一本通常意味着一遍又一遍地阅读的书,在几个地方添加书签,通过寻找给定的章节和经文指针等等,等等,一个好的精装装订可以使给定的副本在这种使用下持续更长时间。然而,这些都是平凡的(实际的)问题,不能用来确定给定的实际书籍对象是否是圣经的副本:平装印刷是完全可能的!

类似地,Python 是定义一类语言实现的意义上的“一种语言”,这些语言实现在某些基本方面必须相似(语法,大多数语义,除了那些明确允许它们不同的部分),但完全允许在每个“实现”细节上都不同——包括它们如何处理给定的源文件, 他们是否将源代码编译为一些较低级别的表单(如果是,哪种形式 – 以及他们是否将这些编译表单保存到磁盘或其他地方),他们如何执行所述表单,等等。

经典的实现,CPython,通常简称为“Python”,但它只是几个生产质量的实现之一,与微软的IronPython(编译为CLR代码,即“.NET”),Jython(编译为JVM代码),PyPy(用Python本身编写,可以编译成各种各样的“后端”形式,包括“即时”生成的机器语言)。它们都是Python(==“Python语言的实现”),就像许多表面上不同的书籍对象都可以是圣经(==“圣经的副本”)。

如果你对CPython特别感兴趣:它将源文件编译成Python特定的低级形式(称为“字节码”),在需要时自动执行此操作(当没有字节码文件对应于源文件时,或者字节码文件比源文件早或由不同的Python版本编译时),通常会将字节码文件保存到磁盘(以避免将来重新编译它们)。OTOH IronPython通常会编译为CLR代码(是否将它们保存到磁盘,取决于)和Jython编译为JVM代码(将它们保存到磁盘与否 – 如果保存它们,它将使用该扩展名)。.class

然后,这些较低级别的表单由适当的“虚拟机”(也称为“解释器”)执行 – CPython VM,.Net运行时,Java VM(又名JVM)。

因此,从这个意义上说(典型的实现是做什么的),Python是一种“解释语言”,当且仅当C#和Java是:它们都有一个典型的实现策略,即首先生成字节码,然后通过VM/解释器执行它。

更有可能的是,重点是编译过程的“沉重”、缓慢和高仪式感。CPython 旨在尽可能快地编译,尽可能轻量级,尽可能少地进行仪式——编译器很少进行错误检查和优化,因此它可以在少量内存中快速运行,这反过来又让它在需要时自动透明地运行,用户甚至不需要意识到正在进行编译, 大多数时候。Java 和 C# 通常在编译期间接受更多工作(因此不执行自动编译),以便更彻底地检查错误并执行更多优化。这是灰度的连续统一体,而不是黑白的情况,在某个给定级别设置阈值并说仅在该级别以上才称之为“编译”是完全武断的!

分割线

网友回答:

没有解释性语言这样的东西。使用解释器还是编译器纯粹是实现的特征,与语言完全无关。

每种语言都可以由解释器或编译器实现。绝大多数语言至少具有每种类型的一个实现。(例如,有C和C++的解释器,也有JavaScript,PHP,Perl,Python和Ruby的编译器。此外,大多数现代语言实现实际上结合了解释器和编译器(甚至多个编译器)。

语言只是一组抽象的数学规则。口译员是语言的几种具体实施策略之一。这两者生活在完全不同的抽象级别上。如果英语是一种打字语言,则术语“解释性语言”将是类型错误。“Python 是一种解释型语言”这句话不仅是错误的(因为如果说错,也意味着这个陈述是有意义的),它只是没有意义,因为一种语言永远不能被定义为“解释的”。

特别是,如果你看看目前现有的Python实现,这些是他们正在使用的实现策略:

  • IronPython:编译为DLR树,然后DLR编译为CIL字节码。CIL 字节码会发生什么取决于你运行的 CLI VES,但 Microsoft .NET、GNU Portable.NET 和 Novell Mono 最终会将其编译为本机机器代码。
  • Jython:解释Python源代码,直到它识别出热代码路径,然后将其编译为JVML字节码。JVML 字节码会发生什么情况取决于您运行的 JVM。Maxine 会直接将其编译为未优化的本机代码,直到它识别出热代码路径,然后将其重新编译为优化的本机代码。HotSpot将首先解释JVML字节码,然后最终将热码路径编译为优化的机器码。
  • PyPy:编译为 PyPy 字节码,然后由 PyPy VM 解释,直到它识别热代码路径,然后将其编译为本机代码、JVML 字节码或 CIL 字节码,具体取决于您运行的平台。
  • CPython:编译成CPython字节码,然后进行解释。
  • Stackless Python:编译成CPython字节码,然后进行解释。
  • Unladen Swallow:编译为CPython字节码,然后对其进行解释,直到识别出热代码路径,然后将其编译为LLVM IR,然后LLVM编译器将其编译为本机机器代码。
  • Cython:将Python代码编译为可移植的C代码,然后用标准的C编译器编译
  • Nuitka:将Python代码编译为依赖于机器的C++代码,然后使用标准C编译器进行编译

您可能会注意到,该列表中的每个实现(以及我没有提到的其他一些实现,如tinypy,Shedskin或Psyco)都有一个编译器。事实上,据我所知,目前还没有纯粹解释的Python实现,没有这样的实现计划,也从来没有这样的实现。

“解释语言”一词不仅没有意义,即使你将其解释为“具有解释实现的语言”,它显然是不正确的。谁告诉你的,显然不知道他在说什么。

特别是,您看到的文件是由CPython,Stackless Python或Unladen Swallow生成的缓存字节码文件。.pyc

模板简介:该模板名称为【如果解释Python,什么是.pyc文件?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Python】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 228次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 03-20
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信模板 自适应 微信素材 响应式 单页式简历模板 微信公众平台 微信图片 微信文章 企业网站 html5
您可能会喜欢的其他模板