【问题标题】:How to read Python source code directly from IDE如何直接从 IDE 读取 Python 源代码
【发布时间】:2017-12-20 07:13:17
【问题描述】:

我目前正在学习 Python,我想通过阅读其源代码来更深入地了解 Python 的工作原理。

我可以手动进入安装 Python 的目录并查看源代码

我想知道,是否可以直接从 PyCharm 等 IDE 读取 Python 源代码?

我尝试在方法名称上control click,尽管它确实将我带到了方法定义页面,但它不包含任何实现代码

编辑 1

我了解大量的python(准确地说是cpython)是用c实现的。 PyCharm 之类的 IDE 中是否有读取 c 代码的方法?

【问题讨论】:

  • 很多Python的内部函数其实都是用C实现的
  • 如果我错了请纠正我,我猜str类的split方法没有显示代码的原因是因为split方法是用c实现的?跨度>
  • 有可能,是的。我认为,如果您想比较的话,python 文档确实会将您链接到源代码
  • 感谢您的提示!我一定会检查出来的:)
  • Python 的内置类型是用 C 实现的,所以像 str.split() 这样的东西不容易映射到源代码。相反,您看到的是这些对象的 PyCharm 内部表示,仅用于帮助自动完成和内联帮助。

标签: python pycharm


【解决方案1】:

正如你所说,大部分 python 是用 C 编写的,但这些包含在发行版中。所以你不能从你的 IDE 中读取源代码。这些主要是编译的源代码,这意味着解释器只使用字节码。并不是所有的函数都是用 C 写的,实际上大部分都是用纯 Python 写的。

查看源代码的一种方法是通过终端使用ipython

In [10]: import string
In [11]: string.lower??
Signature: string.lower(s)
Source:   
def lower(s):
    """lower(s) -> string

Return a copy of the string s converted to lowercase.

"""
return s.lower()
File:      /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/string.py
Type:      function

In [12]: import os

In [13]: os.system??
Docstring:
system(command) -> exit_status

Execute the command (a string) in a subshell.
Type:      builtin_function_or_method

您也可以使用inspect.getsource() 找到您想要的。

import inspect
import os
print (inspect.getsource(os))
# You should see the source code here

与上面的示例一样,这不适用于某些内置函数。

要检查用 C 编写的内容,您应该使用另一种方法,即检查 this link,这是 python 解释器的官方存储库。大多数对象类型都列在cpython/Objects 文件夹中。例如,这是 list object 在 C 中的实现,builtin 模块参考这个。

我相信这就是你想要的。如果您需要帮助,请发表评论。

【讨论】:

    【解决方案2】:

    通常 PyCharm 会执行您想要的操作,除非 Ctrl+Click 将您引导至 C 函数。在这种情况下,您将仅获得有关函数签名和返回值等的最少信息,就像您在帖子中显示的那样。出于效率原因,内置插件主要是用 C 编写的,所以如果你想查看 C 代码,你必须下载 CPython 源代码并深入研究它。另一种选择是下载 PyPy 源代码并查看它。 尽管如此,您仍然可以使用 PyCharm 从标准库中用 Python 编写的模块中读取代码,这将有助于您的学习过程。相信我,你会在那里找到高质量的代码。

    【讨论】:

      【解决方案3】:

      我认为 Python 之所以如此友好,是因为它的高度封装性。也正是因为我们并不总是过分关注底层的实现,提高了我们的效率。所以你通过点击方法名称跳转到方法定义页面,明白这个页面的代码就足够了。除非你想参与 Python 语言本身的开发。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-15
        • 2011-06-29
        • 2011-03-31
        • 1970-01-01
        • 1970-01-01
        • 2021-07-24
        • 1970-01-01
        • 2020-10-16
        相关资源
        最近更新 更多