我想开始阅读Python源代码。
我的经历,
我非常了解Python和Java。我知道其他几种语言的熟练程度,但C / C + /特别好。我在大学里学过C,但从未专业编程。
我阅读此代码的原因。
1对我来说比2更重要。
我应该怎么做?
答案 0 :(得分:44)
首先了解Python C API。它是一个庞大而丰富的API,Python源代码自然而然地在整个地方使用它。在了解Py_INCREF等的含义之前,您不会深入了解Python源代码。
我在Pycon上做了一个演示文稿,解释了API:A Whirlwind Excursion through Python C Extensions,你可能会觉得有帮助。 C扩展使用与Python代码本身相同的API。
答案 1 :(得分:22)
首先,如果你最感兴趣的是1,我首先要阅读各种模块的Python源代码(而不是直接跳到C语言)。每当我发现自己正在阅读某些模块的源代码时,我总是学习有关Python编程的新知识。
其次,如果你想更好地学习C,我个人会提出一些完全不同的东西:编程。只是静态阅读源代码不会让你更好地理解C(或者至少,它是一种有限的方法;它可能会让你更好一点,但只有那么多,阅读源会让你)。
在C中编写至少一个中等大小的项目后,然后我开始查看Python源代码。这真的是更好地了解C的唯一方法,我真的认为在不了解C的情况下阅读Python的C源代码不会让你走得太远。
C项目的想法
事实上,这是一个关于C项目的想法:在C中编写一个Python解释器。显然它不会接近完成,这是一个非常难的项目,但是如果你只关注一些部分的语言,我认为这是一个好主意。
它不仅可以帮助你学习C,它还可以帮助你更好地理解Python,甚至之前查看源代码:你必须更深入地了解批次在Python中的东西,你将理解Python工作方式的设计权衡等等。
然后,当你最终阅读Python的代码时,你不仅会理解为什么有些东西会以这种方式工作,你可能会学到很多非常酷的C技术来解决你遇到的问题。
答案 2 :(得分: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大师”文凭并将其放在办公室墙上。
答案 3 :(得分:12)
从Python网站下载source。假设您将源解压缩到名为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目录还包含其他数据类型的实现。
答案 4 :(得分:5)
这个问题非常广泛,所以我想最好的答案就是下载python source并坚持下去。选择一个你熟悉的模块或python部分,并查看引擎盖下的内容。