我想开始阅读Python源代码。 我应该从哪里开始

我想开始阅读Python源代码。

我的经验,

我非常了解Python和Java。 我知道其他一些熟练程度不同的语言,但是C / C +都不是很好。 我在大学学习C,但从来没有专业编程。

我读这个代码的原因。

  1. 了解Python如何在底层工作。
  2. 更好地学习C

1对我来说比2更重要。

我应该怎么办呢?

从学习Python C API开始。 它是一个庞大而丰富的API,Python源自然地将它用到了所有地方。 在了解Py_INCREF的含义之前,您不会深入Python源代码,等等。

我在Pycon上做了一个介绍API的演示: 通过Python C扩展的Whirlwind Excursion ,你可能会觉得有帮助。 C扩展使用与Python代码本身相同的API。

首先,如果你最感兴趣的是1,我将开始阅读各种模块的Python源代码(而不是直接跳到C)。 每当我发现自己在阅读某些模块的源代码时,我总是会学到关于Python编程的新东西。

其次,如果你想更好地学习C,我个人build议一些完全不同的东西:程序。 只是静态阅读源代码不会让你更好地理解C(或者至less,这是一个有限的方法;它可能会让你更好一点,但只有这么多,阅读源会让你)。

在用C语言编写至less一个中等大小的项目之后,我会开始看Python源代码。 这真的是更好地了解C的唯一方法,而且我真的认为,如果不知道C就读取C的Python源代码就不会让你走得太远。

一个C项目的想法

实际上,下面是一个关于C项目的想法:用C编写一个Python解释器。显然它不会完成,这是一个相当困难的项目,但是如果你只关注语言的某些部分,认为它是一个好主意。

它不仅可以帮助你学习C语言,它还可以帮助你更好地理解Python,甚至查看源代码之前 :你必须更深入地理解Python中的很多东西,你将会理解Python中的devise权衡Python的工作原理等

然后,当你最终阅读Python的代码时,你不仅会理解为什么有些事情会这样,你可能会学到很多非常酷的C技术来解决你的问题。

1)首先确保你可以build立你自己的Python并运行到debugging器中。 因此,您不仅可以添加打印expression式,还可以在点上打断并遵循代码stream程。 如果你有工具,让你跟踪函数调用,完美的,你会需要它。

2)从实现数据types的文件开始。 他们非常容易理解,并且在阅读代码时提高了C语言的语言技能。

3)制作UML图 – 像Argo UML或MS Visio这样的简单绘图辅助工具可以帮助你。 写下代码stream。

4)阅读python的启动代码。 查看基础架构初始化的内容和方式。

6)Ty要100%理解Python方面 – 甚至更难的实现细节,AST是什么以及绑定和未绑定的方法是什么以及如何实现它们。 当你有一个模型时,你将如何编写一个python解释器,然后你可以进入最后的主步骤。

7)用提供的快速debugging器C API编写debugging器扩展。 这可以帮助你提高你的C技能。

8)采取最后的主要步骤,并深入翻译代码的核心。 对于一个熟练的C程序员来说,这甚至很难阅读和理解。 阅读如何评估expression式,caching方法查找,为范围规则等设置框架。从复杂性和代码行方面来看,这是困难和复杂的。

9)启动Adobe Photoshop,创build一个漂亮的“Python大师”文凭,并把它放在你的办公室墙上。

从Python网站下载源代码 。 假设你将源文件解压缩到一个名为Python-3.1.1的目录中。 我build议你在Python源代码中有两个起点,它们可以帮助你探索Python如何工作:

  • 检查Python虚拟机如何执行从interperter生成的字节码。 Python VM位于名为Python-3.1.1 / Python / ceval.c的文件中。 VM的核心是一个eval循环,从ceval.c中的函数PyEval_EvalFrameEx开始。 通读源代码和内嵌评论。 我相信你会喜欢的。

  • 另一个select是看看内置的Python数据types如列表,字典和集合是如何实现的。 例如集合在Python-3.1.1 / Objects / setobject.c中实现。 Objects目录也包含其他数据types的实现。

问题是相当广泛的,所以我想最好的答案是只要下载python源代码就可以了。 select一个你熟悉的python模块或部分,并检查引擎盖下是什么。