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

时间:2018-08-29 15:36:45

标签: python function pycharm built-in

当我尝试在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

1 个答案:

答案 0 :(得分:1)

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


尝试在PyPy而不是CPython中运行代码。 CPython中内置的许多东西都是PyPy中的普通旧Python代码。 1 当然,这并不总是一种选择(例如,PyPy尚不支持3.7功能,缔约方扩展模块,使用起来仍然太慢,如果您使用的是不常见的平台,则很难构建自己的模型……),所以让我们回到CPython。


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

但是,即使您可以阅读基本的C代码并希望找到它,但听起来还是不那么乐于助人。


我怎么知道在GitHub上哪里可以找到该代码?好吧,我知道回购在哪里;我知道将源代码组织成Python,对象,模块等的基本方式;我知道模块名称通常如何映射到C源文件名称。我知道buildins在某些方面很特别……

这些都是非常简单的东西。您难道不可以将所有这些知识编程到一个脚本中,然后就可以用它构建一个PyCharm插件吗?

您可以在一个快速的晚上hack中进行前50%左右的操作,这些事情会在GitHub的海岸上乱扔。但是实际上,正确地做到这一点需要处理大量特殊情况,解析一些丑陋的C代码,等等。对于任何能够编写此类代码的人来说,仅使用lldb Python比编写它要容易得多。


1。另外,即使 内置的东西也是用Python和称为RPython的Python子集混合编写的,您可能会发现它们比C更容易理解-然后,通常很难找到该源,而且看起来像Python的多个级别可能很难保持一致。