常量表里最大的整数
场景:函数 f 用到了几个数,也用到了模块级的 LIMIT。对照表列了八个数。 任务:看 f 的代码对象的常量表(f.__code__.co_consts),找出里面最大的那个整数,到对照表里查它对应的标记。 可操作范围:只在分给你的这台实
条件跳转跳到哪
场景:函数 f 有一个 if,反汇编之后它变成一条条件跳转指令,后面写着「to N」。对照表列了八个数。 任务:找出那个 N(跳转目标的偏移量),到对照表里查它对应的标记。 可操作范围:只在分给你的这台实验机上操作。可以改家目录里的任何东西
哪个函数里有循环
场景:程序里有五个函数,只有一个里面有循环;循环在字节码里是一条往回跳的指令(JUMP_BACKWARD)。对照表列了八个名字。 任务:只从反汇编结果里找出哪个函数有往回跳,到对照表里查它的名字对应的标记。 可操作范围:只在分给你的这台实验
栈最深要几格
场景:编译器在编译时就算好了每个函数的操作数栈最深要几格(co_stacksize)。说明里指定了一个函数。对照表列了八个数。 任务:看那个函数的 co_stacksize,到对照表里查这个数对应的标记。 可操作范围:只在分给你的这台实验机
交一份字节码证据
场景:函数 f 在 ~/程序/程序.py 里。 任务:写 ~/证据.txt,正好三行:「参数个数 …」「局部变量 …」(co_varnames 逗号连、不加空格)「指令条数 …」(dis.get_instructions 数出来的),每行「
编译成 .pyc 再跑
场景:~/程序/程序.py 直接跑会打两行。Python 每次 import 一个模块都会先把它编译成字节码存成 .pyc。 任务:把它编译成 .pyc,把生成的文件放到 ~/构建/程序.pyc;python3 ~/构建/程序.pyc 要能
交付:一个字节码统计工具
场景:需要一个小工具,对任何一个 .py 文件报出每个函数的字节码规模。 任务:写 ~/统计.py,用法 python3 统计.py 某文件.py:每个顶层函数一行「函数名 指令条数 局部变量数」,按定义顺序。写好之后运行 ~/check(
类型系统是什么
左蓝右红两个不同「颜色」的值 颜色(类型)对不上,中间那道拦下它们 一门语言的「类型系统」,一句话说是【0】。
类型能帮你防什么
左蓝右红两个不同「颜色」的值 颜色(类型)对不上,中间那道拦下它们 有了类型检查,最先被挡住的是【0】这类错。
类型标注给谁看
在代码里写上类型标注,它同时是给【0】看的。