python编译器源码分析_Python3.7源码剖析 ------- 手把手教你windows编译Python

Python3.7源码剖析 ------- 编译Python

Python总体架构

Python是一门解释型语言,但是它其实和Java一样,也有自己的虚拟机,只不过大家更乐于称呼它为解释器

那么何为解释器?

故名思意:解释器就好比有道词典,你输入了一些汉字,它回馈给你一些英文

好吧,其实我骗了你,它跟词典还是有一点区别的。

对于词典:我们关注的是它的输出 hello

对于解释器:我们关注的是它的运行结果符不符合我们的预期,而对于他的解释输出,我们通常是不在意的

怎么多了那么多东西,这都是什么啊?

不急,让我们慢慢道来

扫描器分析Python程序语法的正确性

你经常看到的 SyntaxError: invalid syntax 错误,便是扫描器产生的,一旦它发现了你的语法不规范,便不帮你做事了

解析器分析Python的词法和语法,生成一颗抽象语法树

编译器根据解析器生产的抽象语法树,来生成Python字节码

这两个又是什么东西,有什么作用

简单来说就是Python帮我们的程序转化成方便计算机识别的语言,毕竟计算机的逻辑和人类的逻辑是不一样的

有了Python字节码,Python内部通信的官方语言,那么就可以用虚拟机去运行我们的程序啦

执行器(虚拟机)根据官方语言,Python字节码去帮助我们提早下班

构建windows Python编译环境下载visual studio2017(最新版2019应该也可以),并按照网上教程安装即可

下载Python 3.7.3源码,并解压

打开visual studio

选择文件 -> 打开 -> 项目/解决方案

找到Python-3.7.3/PCbuild目录,找到pcbuild.sln,选择并打开

右键 解决方案 -> 选择属性

选择配置 拖动右边的滚动条,将python和pythoncore的生成勾上,点击确定即可

点击本地windows调试器,运行即可,第一次可能会有点漫长,耐心等待即可

出现交互式页面,代表成功

修改源代码

打开pythoncore中Objects目录,找到longobject.c文件

修改1763行左右的long_to_decimal_string函数,这是整数的print方法

static PyObject *

long_to_decimal_string(PyObject *aa)

{

PyObject *v;

if (long_to_decimal_string_internal(aa, &v, NULL, NULL, NULL) == -1)

return NULL;

printf("hello python\n"); // 加上此句 return v;

}

重新点击运行

可以看到在我们输入1和2的时候,会自动输出hello python

前面两个hello python是交互式信息Python 3.7.3这一块生成的,因为它们也用到了这里的函数,可以暂时不管。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值