【问题标题】:How can I learn more about Python’s internals? [closed]我怎样才能更多地了解 Python 的内部结构? [关闭]
【发布时间】: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 内部结构。

标签: python python-3.x internals


【解决方案1】:

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

感谢Planet Python,我发现了它

.

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

【讨论】:

【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    两者都有!认真的。

    【讨论】:

      【解决方案4】:

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

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

      例如:

      等等..

      如果您真的想了解 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.xPython 3.x 的源代码,但老实说,我会坚持阅读教程,也许还有 Python 库中的一些 .py 文件。

      【讨论】:

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

      【讨论】:

      • 是的。但是 2to3 并没有处理所有的变化。另外,进行转换不是我的问题;我想从更基本的层面了解这些变化。
      • 噢,真的不应该投反对票,这只是一个误会。投票补偿。
      猜你喜欢
      • 2016-02-29
      • 1970-01-01
      • 2011-05-15
      • 1970-01-01
      • 2018-07-12
      • 2016-04-01
      • 2020-04-06
      • 2012-09-03
      • 1970-01-01
      相关资源
      最近更新 更多