如何在pycharm中查看python的内置函数的实现?

问题描述 投票:3回答:1

当我尝试在PyCharm中查看内置函数all()时,我只能在函数体中看到“pass”。如何查看实际的实现,以便我可以知道内置函数究竟在做什么?

def all(*args, **kwargs): # real signature unknown
    """
    Return True if bool(x) is True for all values x in the iterable.

    If the iterable is empty, return True.
    """
    pass
python function pycharm built-in
1个回答
1
投票

假设您正在使用通常的CPython解释器,all是一个内置函数对象,它只有一个指向静态链接到解释器(或libpython)的编译函数的指针。向您显示该地址的x86_64机器代码可能对绝大多数人来说不是很有用。


尝试在PyPy中运行代码而不是CPython。在CPython中构建的许多东西都是PyPy中的普通旧Python代码。当然,这并不总是一个选项(例如,PyPy还不支持3.7功能,还有一些第三方扩展模块仍然是使用起来太慢,如果你在一些不寻常的平台上,那就更难建立自己......),让我们回到CPython。


该功能的实际C源并不难在线查找。它在bltinmodule.c。但是,与标准库中的Python模块的源代码不同,您可能没有这些文件。即使你确实拥有它们,将二进制文件连接到源的唯一方法是通过调试从该源编译CPython时发出的输出,这可能是你没有做到的。但如果你认为这听起来像个好主意 - 那就是。自己构建CPython(你可能想要一个Py_DEBUG构建),然后你可以在你的C源代码调试器/ IDE中运行它,它可以处理所有笨拙的位。

但是,如果这听起来更有害而不是有用,即使你可以阅读基本的C代码并想找到它......


我怎么知道在GitHub上找到代码的位置?好吧,我知道回购的地方;我知道Python,对象,模块等源的基本组织;我知道模块名称通常如何映射到C源文件名;我知道内置在某些方面很特别......

这都是非常简单的事情。难道你不能将所有这些知识编程到一个脚本中,然后你可以构建一个PyCharm插件吗?

你可以在一个快速的晚上黑客中做前50%左右,这样的东西乱扔在GitHub的海岸。但实际上做得正确需要处理大量特殊情况,解析一些丑陋的C代码等等。对于任何能够编写这样的东西的人来说,只比lldb Python更容易编写它。


1.此外,即使是内置的东西都是用Python和一个名为RPython的Python子集混合编写的,你可能会发现它比C更容易理解,然后再次找到源代码,以及多个级别所有看起来像Python都很难保持直线。

© www.soinside.com 2019 - 2024. All rights reserved.