cpython教程_cpython

cpython教程_cpythonPython是一种跨平台的脚本语言,语言自身简洁、优雅、可扩展。有活跃的开源社区加持,提供了丰富的扩展库,如NumPy(快速数组处理)、SciPy(数值运算)和matplotlib(绘图功能)等很多第三方库,Python已经广泛应用在Web开发、云计算、数据分析、人工智能和科学计算等领域。Pytho

  Python是一种跨平台的脚本语言,语言自身简洁、优雅、可扩展。有活跃的开源社区加持,提供了丰富的扩展库,如NumPy(快速数组处理)、SciPy(数值运算)和matplotlib(绘图功能)等很多第三方库,Python已经广泛应用在Web开发、云计算、数据分析、人工智能和科学计算等领域。Python还可以作为脚本解释器嵌入其它程序,特别是C/C++程序。

  只要实现了Python语言规范,就能够称为能够解释执行Python代码的解释器。CPython就是使用C语言实现的Python解释器,当然还有其它实现版本,如Jython(Java实现)、PyPy(Python实现)、IronPython(基于.NET的实现)。

  阅读和分析Python解释器源码,对日常应用开发不会带来直接作用,也很少有机会去修改Python解释器的功能。但通过分析和理解解释器的实现源码,能够避免应用开发过程中的各种”坑”,尽可能地优化程序性能,甚至有机会可以扩展Python解释器的功能。探究事物的本质是人的天性,特别是爱思考的程序员。

  将原始的Python解释器(CPython)作为分析对象,可以直接从源码开始,由于工作中使用的2.7版本,所以讲解基于2.7.18版本。关于Python解释器源码分析的文章和书籍有不少,这里记录下来主要是出于梳理知识结构和便于记忆目的。

  Python解释器源码下载:https://www.python.org/downloads/source/

  可能碰到的编译问题解决办法:https://www.cnblogs.com/flhang/p/10591639.html

  

  下图是CPython解释器源码目录结构:

  cpython教程_cpython

    注:pythoncore是CPython解释器源码工程,python只是依赖于pythoncore的可执行console程序的工程。

 

  CPython解释器主要包括三部分:

    运行时环境:Objects目录、Python目录

      为解析模块提供运行环境,提供对象/类型系统、内存分配器给解释执行模块使用,以及维护运行时状态。

      对象/类型系统(Object/Type Structures),是实例对象体系和类型对象体系的综合体,提供内建类型/对象、自定义类型/对象的数据结构定义和操作。当前可以记住:”Python中的一切皆对象,包括内建/自定义类型变量、类型本身”。

      内存分配器(Memory Allocator),负责创建对象时内存申请(C malloc接口封装)、对象池等功能。

      运行时状态,维护了解释器在执行字节码时不同的状态,以及状态之间的切换,一个巨大而复杂的有穷状态机。

 

    解释执行模块:Parser目录、Python目录

      Python源码 -> Scanner -> Parser -> Compiler -> Code Evaluator

      这个模块完成了从源码的词法分析(Scanner),切分token并检查词法是否正确,得到单词流;语法分析(Parser),基于单词流分析语句语法是否正确,建立抽象语法树(ASL,Abstract Syntax Tree);编译(Compiler)得到字节码(byte code);执行字节码(Code Evaluator),得到源码执行的结果,Code Evaluator也称为虚拟机。

 

    内置模块:Modules目录

      提供大量的C库,比如cStringIO、MD5、SHA256、math等,C库能够保证执行效率。

      Python语言还可以使用内置的Python语言编写的库,如io、os、re、sqlite3等,它们在CPython源码的Lib目录。

 

今天的文章cpython教程_cpython分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/46659.html

(0)
编程小号编程小号
上一篇 2023-09-05 17:11
下一篇 2023-09-05 17:30

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注