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

agi*_*liq 75 c python

我想开始阅读Python源代码.

我的经验,

我非常了解Python和Java.我知道其他几种语言的熟练程度,但C/C + /特别好.我在大学里学过C,但从未专业编程.

我阅读此代码的原因.

  1. 了解python如何在引擎盖下工作.
  2. 更好地学习C.

1对我来说比2更重要.

我应该怎么做呢?

Ned*_*der 45

首先了解Python C API.它是一个庞大而丰富的API,Python源代码自然而然地在整个地方使用它.在了解Py_INCREF等的含义之前,您不会深入了解Python源代码.

我在Pycon上做了一个演示文稿,解释了API:通过Python C Extensions进行旋风游览,你可能会觉得有用.C扩展使用与Python代码本身相同的API.

  • C API的+1:有很多机会为Python添加电池,这并不好笑. (2认同)

Eda*_*aor 22

首先,如果你最感兴趣的是1,我首先要阅读各种模块的Python源代码(而不是直接跳到C语言).每当我发现自己阅读某些模块的源代码时,我总是学习有关Python编程的新知识.

其次,如果你想更好地学习C,我个人会提出一些完全不同的东西:编程.只是静态地阅读源代码并不会让你更好地理解C(或者至少,它是一种有限的方法;它可能会让你变得更好,但只有读取源才能让你获得更多).

在C语言编程,至少一个中等规模的项目后,然后我会开始寻找Python源.这真的是更好地了解C的唯一方法,我真的认为在不了解C的情况下阅读Python的C源代码并不会让你走得太远.

C项目的想法

事实上,这是一个C项目的想法:在C中编写一个Python解释器.显然它不会接近完成,这是一个非常难的项目,但如果你只关注语言的某些部分,我认为这是一个好主意.

它不仅可以帮助你学习C,它还可以帮助你查看源代码之前更好地理解Python :你必须对Python 中的很多东西有更深入的了解,你才能理解设计中的设计权衡. Python如何工作等

然后,当你最终阅读Python的代码时,你不仅会理解为什么有些东西会以这种方式工作,你可能会学到很多很酷的C技术来解决你遇到的问题.


Lot*_*har 15

1)首先确保您可以构建自己的Python并将其运行到调试器中.因此,您不仅可以添加打印表达式,还可以在点处中断并遵循代码流程.如果你有工具1让你跟踪功能调用,完美,你将需要它.

2)从实现数据类型的文件开始.它们非常易于理解,您在阅读代码时可以提高C语言的语言技能.

3)制作UML图 - 像Argo UML或MS Visio这样的简单绘图助手工具可以在这里为您提供帮助.记下代码流.

4)阅读python的启动代码.了解基础架构的初始化内容和方式.

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

7)使用提供的快速调试器C API编写调试器扩展.这有助于您提高C技能.

8)采取最后的主步骤并深入到解释器代码的核心.对于熟练的C程序员来说,这甚至难以阅读和理解.阅读如何评估表达式和缓存方法查找,为范围规则等设置框架.在复杂性和代码行方面,这是困难和复杂的.

9)启动Adobe Photoshop并创建一个漂亮的"硕士Python"文凭并将其放在你的办公室墙上.

  • 你能告诉我如何将它运行到调试器中吗? (2认同)

ard*_*srk 12

从Python网站下载源代码.假设您将源解压缩到名为Python-3.1.1的目录中.我建议你在Python源代码中有两个起点可以帮助你探索Python的工作原理:

  • 检查Python虚拟机如何执行从交换器生成的字节码.Python VM位于名为Python-3.1.1/Python/ceval.c的文件中.VM的核心是一个eval循环,它从ceval.c中的函数PyEval_EvalFrameEx开始.仔细阅读源代码和内联注释.我相信你会喜欢它.

  • 另一个选择是查看如何实现内置python数据类型,如列表,字典和集合.例如,集合在Python-3.1.1/Objects/setobject.c中实现.Objects目录还包含其他数据类型的实现.


Miz*_*zor 5

这个问题相当广泛,所以我想最好的答案就是下载python源码并坚持下去.选择一个你熟悉的模块或python部分,并查看引擎盖下的内容.

  • +1 - LOL at"and be nuts".. :) (2认同)