gpt4 book ai didi

python - 如何在pycharm中查看python内置函数的执行情况?

转载 作者:行者123 更新时间:2023-11-28 18:08:37 26 4
gpt4 key购买 nike

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

最佳答案

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


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


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

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


我怎么知道在 GitHub 上哪里可以找到该代码?好吧,我知道 repo 协议(protocol)在哪里;我知道源代码的基本组织方式,分为 Python、对象、模块等;我知道模块名通常如何映射到 C 源文件名;我知道内置函数在某些方面很特别……

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

您可以在晚上快速完成前 50% 左右的工作,这样的事情在 GitHub 上随处可见。但实际上正确地做它需要处理大量的特殊情况,解析一些丑陋的 C 代码等。对于任何有能力编写此类东西的人来说,只使用 lldb Python 比编写它更容易。


<子>1。此外,即使是 内置函数也是用 Python 和称为 RPython 的 Python 子集的混合编写的,您可能会发现 RPython 比 C 更容易理解——不过,通常更难找到该源代码,而且看起来像 Python 的多个级别很难保持直线。

关于python - 如何在pycharm中查看python内置函数的执行情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52081316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com