06|循环语句:控制流让虚拟机执行复杂的运算
海纳
你好,我是海纳。
上一节课我们介绍了控制流中的第一种基本结构——分支语句。这一节课我们会介绍第二种基本结构——循环语句。
Python 中有两种循环结构,分别是 while 语句和 for 语句。Python 中的 while 语句和其他语言中的 while 语句差不多,但是 for 语句却和 C、C++、Java 等常见语言有很大的区别,Python 中的 for 语句本质上是一个迭代器。我们要等到实现了类机制以后,才能实现迭代器,所以这节课我们的重点是实现 while 循环。
实现变量
要实现循环结构,首先就要实现变量。在每次循环中,变量都应该有所变化,这样才能在若干次循环以后,破坏循环继续的条件,从而跳出这个循环。接下来我们就实现这个变量机制。我们还是从一个最简单的例子开始。
我们按照以前的方法把它编译成 pyc 文件,然后通过 show_file 工具查看它的字节码。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
1. Python 中的循环结构包括 while 语句和 for 语句,其中 for 语句本质上是一个迭代器,而本节课的重点是实现 while 循环。 2. 实现循环结构需要先实现变量机制,确保在每次循环中变量都有所变化,从而在若干次循环后破坏循环继续的条件,跳出循环。 3. 实现变量机制涉及到字节码的存储和变量表的实现,其中变量表是一个以字符串为键的 map 结构,变量名存储在 CodeObject 的 names 列表中。 4. 为了实现变量表,需要先实现 map 结构,文章提供了一个简单的 map 实现方式,即直接使用数组实现。 5. 在变量表的基础上,进一步支持了 LOAD_NAME 和 STORE_NAME 两个字节码,其中 STORE_NAME 负责在局部变量表 locals 写入变量的值,而 LOAD_NAME 负责从变量表里取出值。 6. 实现了变量的功能后,可以进一步支持循环结构的实现,因为循环结构的实现依赖于循环变量的迭代修改。 7. 实现了循环结构的字节码,包括 POP_JUMP_IF_FALSE 和 JUMP_ABSOLUTE 等指令,以支持循环体的正常执行、continue 和 break 语句的跳转。 8. 通过分析 continue 和 break 语句的实现,以及对应的字节码指令,加深了对循环控制流的理解。 9. 文章总结了实现循环语句的关键步骤和指令,以及对应的字节码指令的作用,为理解虚拟机的计算能力奠定了基础。 10. 思考题提出了老版本的Python字节码中的BREAK_LOOP指令,并引发了对新版本虚拟机中不需要这条指令的思考,为读者提供了进一步思考和探索的机会。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手写 Python 虚拟机》,新⼈⾸单¥59
《手写 Python 虚拟机》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论