是否存在可识别Python内置函数来源的模块?能否用inspect获取其源码?
Python内置函数来源识别与源码获取问题解答
为什么inspect.getsource无法获取内置函数源码
内置函数(比如print)是用C语言实现的,并非Python代码。inspect.getsource()仅支持获取用Python编写的对象(模块、类、函数、方法等)的源码,而builtins.print属于builtin_function_or_method类型,不在该函数的支持范围内,因此会抛出TypeError。
如何获取内置函数的来源信息
Python运行时并没有内置模块直接返回内置函数对应的C源码文件和函数名,但可以通过CPython的源码结构对应:
- 绝大多数常用内置函数(如
print、len、sum等)位于CPython源码的Objects/bltinmodule.c文件中,print对应的C函数名为builtin_print - 部分特殊内置函数可能在其他C文件中,比如
open对应Modules/io.c中的builtin_open
如果需要在Python程序中返回类似source = bltinmodule.c, builtin_print的结果,你需要自行维护一个内置函数名到C文件、函数名的映射表,因为这些元数据并没有被Python运行时存储。
另外,你可以用inspect.isbuiltin()判断一个函数是否为内置函数:
import inspect import builtins print(inspect.isbuiltin(builtins.print)) # 输出True
内容的提问来源于stack exchange,提问作者Trevor Ralston
相关产品推荐
相关产品推荐

