学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
Python实战微信订餐小程序 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
Python量化交易实战 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
py
文件的程序是按照顺序
python3 -m pdb hello.py
来对程序调试bug
bug
bug
会有提示debug
调试顺序执行
说到底 python3
到底是个啥呢?
python3
又是怎么解释 hello.py
的?我们先要看看python3对Guido.py做了些什么???
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ccOYY1KO-1658983227800)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
把原来的字符流
变成了词的流
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4nov6FLF-1658983227802)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
词法分析之后输出的是一个token流
什么是token流呢?
token
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WKMxwEVb-1658983227803)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
古人说听我号令
号指的是号角
令指的是令牌
怎么把源文件变成一个token流呢?
正在上传…重新上传取消
我们尝试运行
分析出来的词(token)流长什么样子呢?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EgAZANBZ-1658983227806)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
第0行设置了编码格式
第1行[0,5)字符是第1行第1个token
第1行[5,6)字符是第1行第2个token
第1行[6,30)字符是第1行第3个token
第1行[30,31)字符是第1行第4个token
第1行[31,32)字符是第1行第5个token
第2行…
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-soEZQniw-1658983227808)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
词分析出来就是怎么组词的问题
生成一棵抽象语法树
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eMiCz6hD-1658983227809)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pg9drQ3r-1658983227810)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aG09sGr2-1658983227811)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-17XE5PnY-1658983227812)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-huaweqMi-1658983227813)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
字节码(指令)才能真正执行
怎么把ast转化为字节码(指令)呢?
需要编译
从一种语言到另一种语言
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OwH7hhhS-1658983227814)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6VhBR32t-1658983227815)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GPSocCk5-1658983227816)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lmcEyj1a-1658983227817)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
:%!xxd
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rFGFSA64-1658983227818)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
disassembler这个词由两部分组成
整体就是
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UU1GWWyv-1658983227818)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6LA7sS2A-1658983227819)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
我们可以看见
前面是行号
每行对应4条指令
每条指令对应一个字节码
那具体这个LOAD_NAME是什么意思呢?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8RfQ5gfU-1658983227821)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pVpSsJvz-1658983227821)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
指令助记符 | 指令含义 | 十进制状态 | 十六进制状态 |
---|---|---|---|
LOAD_NAME | 装载函数名称 | 101 | 0x65 |
LOAD_CONST | 装载参数 | 100 | 0x64 |
CALL_FUNCTION | 调用函数 | 142 | 0x8e |
POP_TOP | 弹栈返回 | 1 | 0x01 |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4X37wmDH-1658983227822)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
好像找到了
但是0x83 对应的是 GET_AWAITABLE
显然00 83是从表中的0号位置取得字符串变量
01 83是从表中的1号位置取字符串
以此类推,直到05 83
那这些代码究竟是什么指令集的呢?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VanJdbyS-1658983227823)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
我们把python源文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WtEePzcY-1658983227824)(https://img2022.cnblogs.com/blog/2110169/202207/2110169-20220728091436935-1079774380.gif “点击并拖拽以移动”)]编辑
本文章来自于《oeasy教您玩转python》(https://www.lanqiao.cn/courses/3584)中第6个实验。