如何更深入地了解Python内部机制?

57

我已经使用Python编程半年多了,对于Python内部更感兴趣,而不是用Python开发应用程序。目前,我正在将一些库从Python2迁移到Python3。然而,我对于如何将东西从Python2迁移到Python3有一个抽象的看法,因为大部分的变化涉及到Python2.x中的设计问题。

我想学习更多关于Python内部的知识;我应该采取自上而下还是自下而上的方法?你能推荐一些参考资料吗?


你能解释一下为什么你认为需要了解Python(2.x?3.x?两者都有?)的内部机制才能将代码从2迁移到3吗? - John Machin
也许问题表达不够清晰(抱歉!)。我目前在移植库方面没有任何困难,只是想更好地了解Python内部。我只是想知道底层的运作方式。我在想采用自上而下或自下而上的方法哪一种更好,并且如果有人能为此建议资源就更好了。 - user277465
2
@uki 很晚回答,但我会把这个放在这里,供任何可能仍然感兴趣的人参考。《Python虚拟机内幕》(https://leanpub.com/insidethepythonvirtualmachine)提供了足够详细的Python内部实现过程的介绍。 - cobie
6个回答

42

看起来您想了解语言设计背后的原理,而不是语言内部的细节。对我而言,“内部”意味着诸如对象在内存中的布局方式,引用计数的工作原理等。

如果您正在寻求更深入的设计决策理解,请阅读PEPs:它们是语言变化的提案,通常包括有关变化原因、被拒绝的替代方案等详细讨论。即使是被拒绝的PEP也很有用,因为它们展示了塑造语言思维的过程。

例如:

等等...

如果您真的想了解Python内部细节,请先阅读Python C API,这是构建Python本身所使用的工具:我的演讲“通过Python C扩展进行旋风式之旅”是一个好的入门起点。然后,您可以深入源代码研究任何需要了解的内容。


6
遵循Ned的主题,您可以直接从权威的博客中了解一些设计决策背后的历史 - http://python-history.blogspot.com/ - Jeremy Brown
1
为什么有些答案如此酷炫!!! - userx

15
对于那些通过相关链接或搜索偶然发现这个问题的人,有一份由 Yaniv Aknin 撰写的关于 Python 内部工作原理的文档。Python Internals从零开始讲解,易于阅读。

5

3
请将“replace the Pythons Innards link with: https://web.archive.org/web/20120225020122/https://en.wordpress.com/tag/pythons-innards/”翻译成中文。将“Pythons Innards”链接替换为:https://web.archive.org/web/20120225020122/https://en.wordpress.com/tag/pythons-innards/ - Adorn
也许这就是 Yaniv Aknin 的 Python 内部系列移动到的地方:https://tech.blog.aknin.name/category/my-projects/pythons-innards/ - vasili111

2
我首先会阅读Python 3的新特性文档。它提供了一个很好的高层次概述,并涉及详细的更改。
您还可以搜索“迁移到Python 3”或类似内容。有许多很好的资源和工具可用。
一个新的、难以找到的工具是由Benjamin Peterson开发的six。它使编写代码能够跨越Python 2*3的差距兼容。
我发现维护Python 2和Python 3兼容代码最困难的部分是部署。我可以编写可以正常运行的代码,但当我尝试打包和部署时,不清楚何时进行转换。最终,我找到了一个distutils命令build_py_2_to_3,可以解决这个问题。通过在我的setup.py中使用该命令,我可以发布一个源分发版,可以在Python 2或Python 3上部署。一个示例可以在jaraco.util中找到。
你也问到了内部细节。如果你真的想了解内部细节,你可以查看Python 2.xPython 3.x的源代码,但说实话,我建议你还是阅读教程和一些Python库中的.py文件。

我并没有在移植库方面遇到任何问题。我熟悉如何移植库。我想请教一下如何理解Python内部的方法。如果我的问题不太清楚,还请见谅。 - user277465

1
我应该采用自上而下还是自下而上的方法呢?
两种都可以!说真的。

0

是的,但2to3并不能处理所有更改。此外,进行转换不是我的问题;我想更基本地理解这些更改。 - user277465
啊,真的不应该被踩,只是一个误解。投票赞成以补偿。 - Paul D. Waite

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接