全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货  >  详情

python的查找器

来源:千锋教育
发布人:xqq
2023-11-05

推荐

在线提问>>

一、元路径查找器(metapathfinder)

元路径查找器的工作就是看是否能找到模块。这些查找器存放在sys.meta_path中以供Python遍历(当然它们也可以通过import勾子返回,参见上面的例子)。每个查找器必须实现find_spec方法。如果一个查找器知道怎么处理将引入的模块,find_spec将返回一个ModuleSpec对象(参见下节)否则返回None。

和之前提到的一样sys.meta_path包含三种查找器:

内置模块查找器

冻结模块查找器

基于路径的查找器

这里我们想重点聊一聊基于路径的查找器(pathbasedfinder)。它用于搜索一系列import路径,每个路径都用来查找是否有对应的模块可以加载。默认的路径查找器实现了所有在文件系统的特殊文件中查找模块的功能,这些特殊文件包括Python源文件(.py文件),Python编译后代码文件(.pyc文件),共享库文件(.so文件)。如果Python标准库中包含zipimport,那么相关的文件也可用来查找可引入的模块。

路径查找器不仅限于文件系统中的文件,它还可以上URL数据库的查询,或者其他任何可以用字符串表示的地址。

你可以用上节提供的勾子来实现对同类型地址的模块查找。例如,如果你想通过URL来import模块,那么你可以写一个import勾子来解析这个URL并且返回一个路径查找器。

注意,路径查找器不同于元路径查找器。后者在sys.meta_path中用于被Python遍历,而前者特指基于路径的查找器。

二、ModuleSpec对象

每个元路径查找器必须实现find_spec方法,如果该查找器知道如果处理要引入的模块,那么这个方法将返回一个ModuleSpec对象。这个对象有两个属性值得一提,一个是模块的名字,而另一个则是查找器。如果一个ModuleSpec对象的查找器是None,那么类似ImportError:missingloader的异常将会被抛出。查找器将用来创建和执行一个模块(见下节)。

你可以通过.__spec__来查找模块的ModuleSpec对象:

In[1]:importsys

In[2]:sys.__spec__

Out[2]:ModuleSpec(name='sys',loader=)

三、加载器(loader)

加载器通过create_module来创建模块以及exec_module来执行模块。通常如果一个模块是一个Python模块(非内置模块或者动态扩展),那么该模块的代码需要在模块的__dict__空间上执行。如果模块的代码无法执行,那么就会抛出ImportError异常,或者其他在执行过程中的异常也会被抛出。

绝大多数情况下,查找器和加载器是同一个东西。这种情况下,查找器的find_spec方法返回的ModuleSpec对象的loader属性将指向它自己。

我们可以用create_module来动态创建一个模块,如果它返回NonePython会自动创建一个模块。

以上内容为大家介绍了python的查找器,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。

相关文章

python中的filter函数功能是什么?

python delattr函数如何使用?

python中pdb模块怎么用?

Python如何截图保存?

python​中缺少module怎么办?

开班信息 更多>>

课程名称
全部学科
咨询

HTML5大前端

Java分布式开发

Python数据分析

Linux运维+云计算

全栈软件测试

大数据+数据智能

智能物联网+嵌入式

网络安全

全链路UI/UE设计

Unity游戏开发

新媒体短视频直播电商

影视剪辑包装

游戏原画

    在线咨询 免费试学 教程领取