如何找到内置Python函数的源代码?
有没有办法查看Python内置函数是怎么工作的?我不是说只是怎么使用它们,而是想知道它们是怎么构建的,比如sorted或者enumerate背后的代码是什么样的……?
8 个回答
我花了一些时间才找到以下这些内置函数
的来源,因为搜索结果会有成千上万条。(祝你好运,去找这些函数的来源)
总之,所有这些函数都是在bltinmodule.c
文件中定义的。函数的命名格式是builtin_{函数名}
内置函数的来源:https://github.com/python/cpython/blob/master/Python/bltinmodule.c
关于内置类型的来源: https://github.com/python/cpython/tree/master/Objects
这里有一个简单的步骤指南,来补充一下@Chris的回答。CPython已经迁移到GitHub上,之前的Mercurial仓库将不再更新:
- 如果你还没有安装Git,请先安装它。
git clone https://github.com/python/cpython.git
代码会被下载到一个叫做
cpython
的子文件夹里 -> 输入cd cpython
进入这个文件夹- 假设我们想找
print()
这个函数的定义... egrep --color=always -R 'print' | less -R
- 哦!看到了!在
Python/bltinmodule.c
文件里找到了builtin_print()
祝你好运!
因为Python是开源的,你可以查看它的源代码。
如果你想知道某个模块或函数是在哪个文件里实现的,通常可以打印出__file__
这个属性。或者,你也可以使用inspect
模块,具体可以参考文档中关于获取源代码的部分。
对于内置的类和方法,这就没那么简单了,因为inspect.getfile
和inspect.getsource
会返回一个类型错误,提示这个对象是内置的。不过,很多内置类型可以在Python源代码主目录下的Objects子目录
找到。例如,你可以在这里查看enumerate类的实现,或者在这里查看list
类型的实现。