一、引入问题
今天在使用python时,在pycharm中进入了print函数的位置,想一探print函数的功能实现的代码是什么,结果进入了一个名为builtins.py的文件,具体print函数的内容是这样的:
发现这其中什么逻辑都没有写,结果只是一些print函数各参数的描述以及pass占位符作为结尾!
那就奇怪了,print函数的功能是在哪实现的呢?????
-------------------------------------------------------------------------------------
二、解决问题
1.print及其他内置函数源代码在哪?
熟悉python的人都知道python这门编程语言有多种实现。例如:
1.CPython:这是Python的官方版本,使用C语言实现,使用最为广泛,新的语言特性一般也最先出现在这里。
2.Jython:这是Python的Java实现。
3.Python for .NET:它实质上是CPython实现的.NET托管版本,它与.NET库和程序代码有很好的互操作性。
4.IronPython:不同于Python for .NET,它是Python的C#实现。
5.PyPy:Python的Python实现版本
具体看原文链接:Python的另外几种语言实现
所以咱们下载的python官方版本,是通过C语言实现的(CPython),通过下图框选的路径不难发现,这个名为builtins.py的文件是存放在Pycharm安装目录里的。
因此,我们在pycharm进入的print函数位置只是pycharm为了进行友好的代码提示,写了一个和底层差不多的访问接口,而其中功能的实现其实并不在这里。
我们下载的python也是一个通过c语言编译封装好的可执行文件(python.exe),可以直接运行使用print等功能函数,例如:
因此若想查看源代码,就必须找到CPython编译前的代码
所以就需要去github找源码了:https://github.com/python/cpython
2.下载查看源码
(1)进入GitHub,下载源码zip文件:
(2) 解压完成目录结构如下
(3)目录结构解释:
cpython/
│
├── Doc ← 源代码文档说明
├── Grammar ← 计算机可读的语言定义
├── Include ← C 语言头文件(头文件中一般放一些重复使用的代码)
├── Lib ← Python 写的标准库文件
├── Mac ← Mac 支持的文件
├── Misc ← 杂项
├── Modules ← C 写的标准库文件
├── Objects ← 核心类型和对象模块
├── Parser ← Python 解析器源码
├── PC ← Windows 编译支持的文件
├── PCbuild ← 老版本的 Windows 系统 编译支持的文件
├── Programs ← Python 可执行文件和其他二进制文件的源代码
├── Python ← CPython 解析器源码
└── Tools ← 用于构建或扩展 Python 的独立工具
(4)print等其他函数的源码位置在Python目录下的bltinmodule.c文件中
从上图可以看出,在python中print函数需要的参数在源码中都能够找到,但奈何我的能力有限,还没有能力扒完源码的功能实现,以上。
参考文章:
阅读CPython源码:https://zhuanlan.zhihu.com/p/79656976
Python的另外几种语言实现:http://zhishichong.com/article/39305
CPython源码(GitHub):https://github.com/python/cpython
在python中找到print或printf的源代码:https://www.it1352.com/2341619.html