手写 Python 虚拟机
海纳
华为资深编译专家,原 Huawei JDK 团队负责人
1143 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已更新 16 讲/共 28 讲
导学|直播加餐:三小时掌握C++ (2讲)
对象系统:面向对象编程的核心设施 (1讲)
手写 Python 虚拟机
15
15
1.0x
00:00/00:00
登录|注册

13|列表(上):Python语言的核心数据结构

你好,我是海纳。
第 7 节课,我们实现了 Python 的两个基本的内建类型:整数和字符串,从而构建了虚拟机的最基本的对象系统。从这节课开始,我们来实现两个重要的基本内建类型,分别是列表(list)和字典(dict)。
我们先来研究如何实现列表。

列表的定义

Python 中的列表很像数组操作,可以支持对元素的插入、添加、删除等操作。实际上 Python 的 list 和 C++ STL 中的 vector 非常相似。区别在于,Python 的 list 允许它的元素是不同类型的。我们以一个例子来说明 list 的特性。
# test_list.py
lst = [1, "hello"]
# result is [1, 'hello']
print(lst)
上面的代码定义了一个列表,这个列表包含了两个元素。第一个元素是整数 1,第二个元素是字符串 “hello”。第二行代码把这个列表打印了出来。
通过 show_file 工具,我们能观察到 Python 为了定义列表引入了新的字节码。这节课我们的任务就是实现这些定义列表所用的字节码。
1 0 LOAD_CONST 0 (1)
2 LOAD_CONST 1 ('hello')
4 BUILD_LIST 2
6 STORE_NAME 0 (lst)
4 8 LOAD_NAME 1 (print)
10 LOAD_NAME 0 (lst)
12 CALL_FUNCTION 1
14 POP_TOP
16 LOAD_CONST 2 (None)
18 RETURN_VALUE
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

1. Python中的列表类似于数组操作,支持元素的插入、添加、删除等操作,与C++ STL中的vector相似,但Python的列表允许不同类型的元素。 2. 实现了列表的字节码BUILD_LIST,引入ListKlass为列表类增加类型标志,并在ListKlass中实现相应的方法。 3. 实现了列表的取下标操作,通过引入subscr方法和在ListKlass中实现相应的逻辑来支持列表的下标操作。 4. 实现了列表中查找元素的功能,通过引入contains方法和在ListKlass中实现相应的逻辑来支持判断列表中是否包含某元素。 5. 实现了列表的删除操作,通过在ListKlass中实现相应的逻辑来支持删除列表中的元素。 6. 实现了列表的增加操作,通过在ListKlass中实现相应的逻辑来支持向列表中添加元素。 7. 实现了列表的修改操作,通过在ListKlass中实现相应的逻辑来支持修改列表中的元素。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手写 Python 虚拟机》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部