手写 Python 虚拟机
海纳
华为资深编译专家,原 Huawei JDK 团队负责人
1286 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已更新 29 讲/共 29 讲
导学|直播加餐:三小时掌握C++ (3讲)
手写 Python 虚拟机
15
15
1.0x
00:00/00:00
登录|注册

25|模块和库:构筑现代软件系统的基础材料

你好,我是海纳。
在之前的课程里,我们分别实现了函数的功能,面向对象的基础设施以及自动内存管理功能。这一节课将开始一个新的主题,那就是模块和库。
在现在的编程语言中,模块和库是最重要的组成部分,它决定了某一门语言的流行程度。例如 Java、Perl 等语言都有丰富的扩展库,可以方便地实现各种功能。
Python 语言也不例外,甚至可以说,Python 的成功正是由于它的丰富多样的功能库。功能库既要容易开发维护,也要容易部署传播,这就需要在语言虚拟机的层面进行全面的设计。
今天我们就来研究 Python 中的块和模块是如何定义、组织和实现的。我们的目标并不是实现一个完备的,功能强大的运行时库(Runtime Library),而是重在介绍虚拟机为实现模块和库的功能,提供了哪些能力。

实现 import 语句

在 Python 中,库是以模块为单位进行组织的,一个库由一个或者多个模块组成。导入一个库,其实就是导入它的模块,导入模块使用的语句是 import。我们通过一个例子来说明 import 语句的用法。
# test_import.py
import test_func
print(test_func.fact(5))
# test_func.py
print("loading func module")
def fact(n):
if n == 0:
return 1
else:
return n * fact(n-1)
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. 模块和库是现代软件系统的基础材料,对于构建现代软件系统至关重要。 2. 在Python中,库是以模块为单位进行组织的,一个库由一个或多个模块组成,导入模块使用的语句是import。 3. 实现import语句的过程中,通过IMPORT_NAME指令将模块加载到虚拟机对象中,并通过STORE_NAME将其赋值给相应的变量。 4. 使用import_module方法加载模块,通过search_file在Python的库目录下搜索模块,然后调用import_pyc加载模块。 5. 实现加载模块功能时,虚拟机首先找到模块对应的文件,加载文件并执行其中的代码,创建一个新的命名空间ModuleObject。 6. IMPORT_FROM字节码的实现依赖于ModuleObject中的get方法,用于从一个模块对象中获取符号。 7. 实现from子句可以使代码简洁,性能也会稍好一些,因为少了一次LOAD_ATTR的调用,但可能会增加命名冲突的可能性。 8. 在Interpreter的初始化方法中,通过调用import_module将builtin.py中的符号加载成模块,并且通过extend方法将两个模块合并,得到完整的builtin模块。 9. import_module方法的主要工作流程是在搜索目录中找到要加载的模块所对应的文件,加载pyc文件并使用BinaryFileParser对其进行解析,最终得到完整的ModuleObject。

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

精选留言

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