为什么一些内置的Python函数只有pass关键字?

66

我想查看math.py的函数实现,但是当我在PyCharm中打开文件时,发现所有的函数都是空的,并且只有一个简单的pass。例如:

def ceil(x): # real signature unknown; restored from __doc__
    """
    ceil(x)

    Return the ceiling of x as a float.
    This is the smallest integral value >= x.
    """
    pass

我猜这是因为使用的函数实际上来自于C标准库。它是如何工作的?


1
math.py?什么math.py?我不认为Python自带这样的文件。math模块是在Modules/mathmodule.c中实现的,这个文件可能不会被包含在你的Python安装中。 - user2357112
4
谷歌搜索“Python真实签名未知”表明这是PyCharm的某种功能,但是PyCharm在误导您。 - user2357112
确切地说,PyCharm 告诉我 math.py 存在。它是一个包含所有数学函数的文件,例如我在问题中提到的 ceil 函数都是空的。 - edgarstack
2个回答

86

PyCharm欺骗了你。你正在查看的源代码是由PyCharm创建的虚假代码。PyCharm知道哪些函数应该存在,并且可以使用函数docstrings猜测它们的签名,但它不知道这些函数的具体实现应该是什么。

如果你想查看真正的源代码,可以在官方的Github存储库中查看:Modules/mathmodule.c。其中许多函数都是通过宏生成的C函数的包装器,而还有一些手动编写的代码来处理诸如不一致或不足的标准库实现、没有math.h等价物的函数和自定义钩子(如__ceil__)。


40
您可以通过标题栏中文件路径来识别伪造的源文件。真实路径为:\Python\Python<version>\Lib\。伪造的路径为:\PyCharm<version>\system\python_stubs\ - Stevoisiak
既然我们可以通过执行它们(如 ceil 函数)来使用它们,为什么在本地环境中无法找到源代码呢?这是因为它已经是二进制格式吗?(如果是这种情况,该二进制文件在哪里可以找到?) - Luk Aron
1
@LukAron:在Windows上,math直接编译进Python可执行文件中。在其他平台上,您可以检查math.__file__以找到.so文件。 - user2357112
@user2357112supportsMonica 非常感谢你的回复,在Windows系统中,有没有办法找到这个可执行文件的位置呢? - Luk Aron
7
但是为什么PyCharm会说谎呢? - T.M15
1
有没有一种方法可以链接实际文件? - MikeSchem

0

有些Python库没有用Python编写的源代码。 这些库是用C或其他语言编写的。它们不是由.py文件表示的,PyCharm或任何其他IDE无法以可读的方式打开它们的源代码。

您可以在...\AppData\Local\Programs\Python\Python310\Lib\site-packages中检查源代码。最有可能在your-package文件夹中会有.pui、.pud、.dll和其他类似的文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接