py
文件的程序是按照顺序
python3 -m pdb hello.py
来对程序调试bug
bug
bug
会有提示debug
调试顺序执行
说到底 python3
到底是个啥呢?
python3
又是怎么解释 hello.py
的?我们先要看看python3对Guido.py做了些什么???
编辑
把原来的字符流
变成了词的流
编辑
词法分析之后输出的是一个token流
什么是token流呢?
token
编辑
古人说听我号令
号指的是号角
令指的是令牌
怎么把源文件变成一个token流呢?
正在上传…重新上传取消
我们尝试运行
分析出来的词(token)流长什么样子呢?
编辑
第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行…
编辑
词分析出来就是怎么组词的问题
生成一棵抽象语法树
编辑
编辑
编辑
编辑
编辑
字节码(指令)才能真正执行
怎么把ast转化为字节码(指令)呢?
需要编译
从一种语言到另一种语言
编辑
编辑
编辑
编辑
:%!xxd
编辑
disassembler这个词由两部分组成
整体就是
编辑
编辑
我们可以看见
前面是行号
每行对应4条指令
每条指令对应一个字节码
那具体这个LOAD_NAME是什么意思呢?
编辑
编辑
指令助记符
指令含义
十进制状态
十六进制状态
LOAD_NAME
装载函数名称
101
0x65
LOAD_CONST
装载参数
100
0x64
CALL_FUNCTION
调用函数
142
0x8e
POP_TOP
弹栈返回
1
0x01
编辑
好像找到了
但是0x83 对应的是 GET_AWAITABLE
显然00 83是从表中的0号位置取得字符串变量
01 83是从表中的1号位置取字符串
以此类推,直到05 83
那这些代码究竟是什么指令集的呢?
编辑
我们把python源文件
编辑
本文章来自于《oeasy教您玩转python》(https://www.lanqiao.cn/courses/3584)中第6个实验。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章