猿问

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

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

我被告知Python是一种解释语言.。然而,当我查看我的Python源代码时,我看到了.pyc文件,Windows将其标识为“已编译的Python文件”。这些从哪来的?



慕尼黑5688855
浏览 779回答 3
3回答

侃侃无极

它们含有字节码,这就是Python解释器将源代码编译到的内容。然后由Python的虚拟机执行这段代码。Python的文档如下所示解释了这个定义:Python是一种解释语言,而不是编译语言,尽管由于字节码编译器的存在,这种区别可能很模糊。这意味着源文件可以直接运行,而无需显式创建可执行文件,然后运行。

子衿沉夜

我被告知Python是一种解释语言.。这种流行的模因是不正确的,或者更确切地说,是建立在对(自然)语言水平的误解之上的:一个类似的错误就是说“圣经是一本精装书”。让我解释一下这个比喻.。“圣经”是指“一本书”班级,等级被确认为“圣经”副本的书应该有一些基本的共同之处(尽管内容可以是不同的语言,有不同的可接受的翻译、脚注和其他注释)-然而,这些书在许多方面都是完全不同的。不被认为是基本的-装订的种类,装订的颜色,印刷中使用的字体,插图(如果有的话),宽的可写边距,数字和内置书签的种类等等。很有可能典型“圣经”的印刷实际上是精装版的-毕竟,这是一本通常被反复阅读的书,在几个地方都有书签,在寻找给定的章节和诗歌的指针时翻阅,等等,一个好的精装版装订可以使一个给定的副本在这样的使用下持续更长的时间。然而,这些都是世俗的(实际的)问题,不能用来确定一个实际的书对象是否是圣经的副本:平装本印刷是完全可能的!类似地,Python是定义语言实现它们在一些基本方面都必须是相似的(语法,除了那些明确允许它们不同的部分),但它们在几乎每一个“实现”细节上都完全不同-包括它们如何处理给定的源文件,是否将源代码编译到某个较低级别的表单(如果是的话,是哪种形式-以及它们是否保存这些已编译的表单、磁盘或其他地方)、它们如何执行所述的表单等等。经典的实现CPython通常被称为“Python”(简称Python),但它只是几种产品质量实现之一,与微软的IronPython(后者编译为CLR代码,即“.NET”)、Jython(编译成JVM代码)、PyPy(用Python编写,可以编译成大量的“后端”形式,包括“在-时间内”生成的机器语言)并排在一起。它们都是Python(=“Python语言的实现”),就像许多表面上不同的书籍对象都可以是圣经(=“圣经的副本”)一样。如果您对cpython特别感兴趣:它将源文件编译成Python特有的低级表单(称为“字节码”),在需要时自动这样做(如果没有与源文件相对应的字节码文件,或者字节码文件早于源文件或由不同的Python版本编译),通常将字节码文件保存到磁盘(以避免将来重新编译它们)。OTOH IronPython通常会编译为CLR代码(取决于是否将它们保存到磁盘)和Jython编译到JVM代码(将它们保存到磁盘上与否)-它将使用.class扩展(如果它确实保存了它们)。然后,通过适当的“虚拟机”(也称为“解释器”)-CPython VM、.net运行时、JavaVM(又名JVM)-执行这些较低级别的表单。因此,在这个意义上(典型的实现是做什么的),Python是一种“解释语言”当且仅当C#和Java是:它们都有一个典型的实现策略,首先生成字节码,然后通过VM/解释器执行它。更有可能的是,重点在于编译过程的“沉重”、“缓慢”和“高礼仪”。CPython的设计是为了尽可能快的编译,尽可能的轻量级,使用尽可能少的程序-编译器很少进行错误检查和优化,所以它可以在少量的内存中快速运行,这样就可以在需要的时候自动透明地运行它,而用户甚至不需要知道大部分时间都在进行编译。Java和C#通常在编译期间接受更多的工作(因此不执行自动编译),以便更彻底地检查错误并执行更多的优化。这是一个连续的灰色等级,而不是黑色或白色的情况,如果把一个阈值设定在某个给定的水平上,并且说只有在这个级别之上你才称它为“编译”,那将是完全武断的!-)
随时随地看视频慕课网APP

相关分类

Python
我要回答