我怎样才能更多地了解 Python 的内部结构? [关闭]

Posted

技术标签:

【中文标题】我怎样才能更多地了解 Python 的内部结构? [关闭]【英文标题】:How can I learn more about Python’s internals? [closed] 【发布时间】:2011-03-18 22:16:14 【问题描述】:

我已经使用 Python 编程半年多了,我对 Python 内部结构更感兴趣,而不是使用 Python 来开发应用程序。目前我正在将一些库从 Python2 移植到 Python3。但是,我对如何将 Python2 移植到 Python3 有一个相当抽象的观点,因为大多数更改都涉及 Python2.x 中的设计问题

我想了解更多关于 Python 内部的信息;我应该采用自上而下还是自下而上的方法?有什么可以推荐的参考资料吗?

【问题讨论】:

您能解释一下为什么您认为您需要了解有关 Python(2.x?3.x?两者)的内部结构才能将代码从 2 移植到 3?跨度> 也许问题不够清楚(抱歉!)。我目前没有发现移植库有任何困难,只是我想更好地了解 Python 内部结构。我只是好奇这些东西是如何在幕后工作的。我想知道自上而下或自下而上的方法是否会更好。另外,如果有人可以建议相同的资源。 @uki 的答案非常晚,但我会把它放在这里,供任何可能仍然感兴趣的人使用。 Inside The Python Virtual Machine 提供了足够详细的 Python 内部结构。 【参考方案1】:

我找到了Yaniv Aknin's Pythons Innards series的系列 太棒了

感谢Planet Python,我发现了它

.

您可能对this SO threadTryPyPy 的回答也感兴趣

【讨论】:

将 Pythons Innards 链接替换为:web.archive.org/web/20120225020122/https://en.wordpress.com/tag/… 也许这就是 Yaniv Aknin 的 Pythons Innards 系列已经搬家了:tech.blog.aknin.name/category/my-projects/pythons-innards【参考方案2】:

对于从相关链接或搜索中偶然发现此问题的人,Python Internals 上写有 Yaniv Aknin 的文档。它从头开始,具有高度可读性。

【讨论】:

【参考方案3】:

我应该采用自上而下还是自下而上的方法?

两者都有!认真的。

【讨论】:

【参考方案4】:

听起来您想更多地了解语言设计背后的基本原理,而不是内部原理。 “内部”对我来说意味着对象在内存中的布局方式、引用计数的工作方式等等。

如果您想更深入地了解设计决策,请尝试阅读PEPs:它们是语言更改的建议,通常包括更改原因的详细讨论、被拒绝的替代方案以及很快。即使是被拒绝的 PEP 也很有用,因为它们展示了塑造语言的思想。

例如:

3105: Making print a function 3110: Catching exceptions in Python 3.x 3131: Supporting non-ASCII identifiers

等等..

如果您真的想了解 Python 内部结构,请先阅读 Python C API,它用于构建 Python 本身:我的演讲 A Whirlwind Excursion through Python C Extensions 是一个起点。然后,您可以深入了解 Python 源代码本身,了解您需要了解的任何内容。

【讨论】:

坚持 Ned 的主题,您可以直接从马口中获得一些设计决策背后的历史 - python-history.blogspot.com 为什么有些答案这么酷!!!【参考方案5】:

我会首先阅读 Python 3 的 What's New 文档。它提供了一个很好的高级概述并涉及到详细的更改。

您也可以搜索“porting to python 3”或类似内容。有很多很好的资源和工具。

本杰明·彼得森 (Benjamin Peterson) 的 six 是一个很难找到的新工具。它支持编写跨越 Python 2*3 差距的兼容代码。

我发现维护与 Python 2 和 Python 3 兼容的代码最困难的部分是部署。我可以编写运行良好的代码,但是当我进行打包和部署时,不清楚何时应该进行转换。我最终找到了一个 distutils 命令build_py_2_to_3 可以解决问题。通过在我的 setup.py 中使用该命令,我可以发布将在 Python 2 或 Python 3 上部署的源代码分发。An example 可以在 jaraco.util 中找到。

您还询问了内部结构。如果你真的想了解内部结构,你可以查看 Python 2.x 和 Python 3.x 的源代码,但老实说,我会坚持阅读教程,也许还有 Python 库中的一些 .py 文件。

【讨论】:

我在移植库时没有任何问题。我熟悉 如何 移植库。我想就采取何种方法来理解 Python 内部结构提供一些帮助。抱歉,如果问题不清楚。【参考方案6】:

你试过了吗?

Automated Python 2 to 3 code translation

【讨论】:

是的。但是 2to3 并没有处理所有的变化。另外,进行转换不是我的问题;我想从更基本的层面了解这些变化。 噢,真的不应该投反对票,这只是一个误会。投票补偿。

以上是关于我怎样才能更多地了解 Python 的内部结构? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

怎么才能做好网站的内部优化

python中@property@setter和@deleter

我怎样才能有效地计时一个只有几个周期长的函数的执行时间?

我怎样才能正确地模仿这种加密方法来为 encryptedPwd 字段生成正确的值?

我怎样才能添加更多功能[关闭]

我怎样才能给eclipse比512M更多的内存?