Python中print以及其他内置函数的源代码的功能是怎么实现的?源代码的位置在哪?

一、引入问题

    今天在使用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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值