我是编程的初学者,并试图从“学习Python由Mark Lutz”学习Python。在“Python解释器介绍”一章中,作者陈述了以下内容:
根据您运行的Python的风格,解释器本身可以实现为C程序,一组Java类或其他东西。
我无法理解如何区分Python代码以便在解释器中进行分区(C程序或Java类,如作者所述)。
答案 0 :(得分:7)
一段Python代码,只是Python代码。作者所说的是有不同的Python解释器 - 所有这些解释器都运行Python代码。这些不同的Python解释器可以是用C,Java,C#或Python本身编写的程序。它们是在命令行键入python
时运行的程序,或从应用程序菜单中选择python
。通常它将是CPython:由Python软件基金会制作的语言的参考实现,它是用C语言编写的。
总而言之,这对于学习Python来说绝对不是必需的 - 只需跳过一下,一旦你对语言更熟悉就回到这个问题。
答案 1 :(得分:2)
Python的参考解释器,其他人用作指南,用C语言编写,它的昵称是CPython(不要与Cython混淆,后者不是解释器)。它将Python代码编译为Python字节码并在其虚拟机上运行,该虚拟机也用C语言编写。
还有其他口译员。以下是一些最知名的。
理论上和理想情况下,所有严格合法的Python代码都应该在其中任何一个上运行相同。可以把它想象成C的不同编译器:严格合法的C代码将编译到任何编译器上的等效程序
void main()
是非标准的)。windows.h
库(就像CPython无法访问Java库一样)。答案 2 :(得分:1)
听起来你的真正问题是Python解释器如何做它的功能。这是整个大学课程的主题,但这是推动力。
解释器使用称为解析器的专用函数读取Python源代码。这是一个输入处理器,它以上下文无关语法的形式理解Python语言的确切结构。
解析过程检查输入是否符合Python语法规则(这里是语法错误的起源)并生成一个数据结构,该结构以简单数组中表示的非常简单的步骤的形式提炼了Python程序的原始含义字节称为字节码。
输入,解析和字节码生成的完整过程称为编译。是的,从本质上讲,Python有一种简单的编译器。
字节代码基于测试结果,字符串操作,从函数调用和返回,输入,输出以及Python程序执行的所有数百个基本操作,执行非常基本的操作,如算术,测试和跳转到其他字节代码位置,当合并并快速执行时,使程序看起来很强大。
在原始Python源与人类语言相当接近的情况下(好吧,有点......),字节代码与机器语言相当接近:处理器理解为指令的1和0的模式。字节代码是程序运行时写入.pyc
文件的代码。
它只需要一个非常小而简单的程序(希望是一个快速的程序)称为字节码解释器(是Python解释器中的解释器)来处理字节代码,以使处理器完成原始工作意图使用Python程序。
当然,如果.pyc
文件已经存在并且比相应的源代码更新,则可以跳过编译。
你有它......用几句话写一个大学课程。我已经跳过了大量的细节,并且(一个警告)我写的一些内容仅适用于那里的许多Python实现,但它是理解的开始。
你的书的作者说上面所有的实现语言可能是C或Java(Python的Jython实现)。他遗漏了只有最小的Python核心是用C或Java实现的。剩下的就是Python本身。
如果您有兴趣了解更多,有一些相当不错的,低成本和免费的来源。请参阅示例this article以及没有太多资金尝试Scheme 9 From Empty Space,了解如何实现除Python之外的其他语言的解释器。