千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:成都千锋IT培训  >  技术干货  >  python的查找器

python的查找器

来源:千锋教育
发布人:xqq
时间: 2023-11-05 20:02:50

一、元路径查找器(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培训机构:千锋教育。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

python delattr函数如何使用?

2023-11-10

python time.strptime的格式化

2023-11-10

pythonGIL在Python多线程的应用

2023-11-10

最新文章NEW

python中pdb模块怎么用?

2023-11-10

Python如何截图保存?

2023-11-10

python​中缺少module怎么办?

2023-11-10

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>