为什么一些内置的Python函数只有传递?

edg*_*ack 28 python standard-library pycharm c-standard-library

我想看看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
Run Code Online (Sandbox Code Playgroud)

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

use*_*ica 35

PyCharm骗你.您正在查看的源代码是PyCharm创建的伪造.PyCharm知道应该有哪些函数,它可以使用函数docstrings猜测它们的签名,但它不知道函数体应该是什么样子.

如果你想看到真正的源代码,你可以在官方的Github存储库中查看它Modules/mathmodule.c.其中很多函数都是围绕C函数的宏生成的瘦包装器math.h,但也有一堆手动编写的代码来处理标准库实现不一致或不充分,没有math.h等效的函数和自定义挂钩之类的东西__ceil__.

  • 您可以通过标题栏中的文件路径识别虚假源文件.真实:``\ Python\Python <version>\Lib \``.假:``\ PyCharm <version>\system\python_stubs \`` (8认同)
  • 但为什么pycharm会撒谎呢? (2认同)