【问题标题】:Why do some built-in Python functions only have pass?为什么有些内置的 Python 函数只有通过?
【发布时间】:2016-11-17 23:04:18
【问题描述】:

本来想看看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 标准库。它是如何工作的?

【问题讨论】:

  • math.py?什么math.py?我不认为 Python 带有这样的文件。 math 模块在 Modules/mathmodule.c 中实现,该文件可能不会进入您的 Python 安装。
  • 谷歌搜索“Python 真实签名未知”表明这是某种 PyCharm 功能,PyCharm 在骗你。
  • 没错,pycharm 告诉我math.py 存在。它是一个包含所有空的数学函数的文件,例如我提出的问题中的ceil。

标签: python pycharm standard-library c-standard-library


【解决方案1】:

PyCharm 在骗你。您正在查看的源代码是 PyCharm 创建的假代码。 PyCharm 知道应该有哪些函数,它可以使用函数文档字符串猜测它们的签名,但它不知道函数体应该是什么样子。

如果你想看到真正的源代码,你可以在Modules/mathmodule.c的官方Github仓库中查看。里面的很多函数都有来自math.h 的围绕C 函数的宏生成的瘦包装器,但也有一堆手动编写的代码来处理诸如标准库实现不一致或不足之类的事情,没有math.h 等效的函数,和自定义钩子,如__ceil__。

【讨论】:

  • 您可以通过标题栏中的文件路径来识别假源文件。真实:\Python\Python<version>\Lib\。假的:\PyCharm<version>\system\python_stubs\
  • 既然我们可以通过执行它们来使用它们(例如ceil函数),为什么我们在本地环境中找不到源?是不是因为它已经是二进制格式了(如果是这种情况,在哪里可以找到这个二进制文件)?
  • @LukAron:在 Windows 上,math 被直接编译成 Python 可执行文件。在其他平台上,您可以查看math.__file__ 找到.so 文件。
  • @user2357112supportsMonica 非常感谢您的回复,在 windows 中,有没有办法找到这个可执行文件的位置?
  • 但是为什么 pycharm 会撒谎呢? ?
【解决方案2】:

一些python库没有用python编写的源代码。 这些库是用 C 或其他语言编写的。它们不是由 .py 文件呈现的,而且 PyCharm 或任何其他 IDE 都无法以可读视图打开它们的源代码。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 2014-10-07
    • 2015-06-25
    • 2021-05-28
    • 1970-01-01
    • 2017-03-09
    相关资源
    最近更新 更多