这个函数的「形状」,编译期就定了
同一个函数,把三个数取出来:参数个数、局部名个数、要往外找的名字个数。
开始练习 →
追踪一行代码,该按什么顺序看
要弄清一行代码是怎么跑起来的,最有效的看法是【0】。
开始练习 →
⚠️ 哪一站的产物里已经没有源码文本了
顺着流水线走,从哪一站开始,产物里就找不到源码原文了?答案是【0】。
开始练习 →
一行代码的四站产物
print("hi") 走完四站,各站留下什么:词数、树里那次调用的类型、编译期记下的名字、常量表第一项。 import ast, io, tokenize LINE = 'print("hi&quo
开始练习 →
⚠️ 最后一站:真的跑一次
把编译好的那个 code 对象真的执行一次: import ast, io, tokenize LINE = 'print("hi")' def toks(src): skip = (toke
开始练习 →
第一站:把词切出来
把 print("hi") 切成的词一个个列出来。
开始练习 →
第二站:把树看清楚
顶层是什么、里面那一层是什么、被调用的名字是什么。(被调用的名字在 t.body[0].value.func.id。)
开始练习 →
第三站:编译产物里留下了什么
编译之后,名字和常量被分开存了。各取第一项出来。
开始练习 →
第四站:真的执行,看它找到了谁
把编译产物执行一次,环境里的 print 换成一个假的,看看运行期到底找到了什么、传了什么进去。
开始练习 →
一份「源码到运行」的说明该讲清什么
要向别人解释一段代码是怎么跑起来的,最该讲清的是【0】。
开始练习 →