python的查找器
一、元路径查找器(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培训机构:千锋教育。
相关推荐HOT
更多>>python中ndarray与list转换的方法
python中ndarray与list转换的方法在python数据类型中,list元素可以任意类型组合,而ndarray元素类型必须相同,但是ndarray可以更方便的对多维...详情>>
2023-11-10 08:51:14python中OrdereDict如何使用?
python中OrdereDict如何使用?我们在对数据进行处理时,如果能够使它们保存顺序的排序,那么用起来会非常的便利。不过字典本身就是没有顺序的,...详情>>
2023-11-10 07:05:00python中如何使用scipy.fftpack模块计算快速傅里叶变换?
python中如何使用scipy.fftpack模块计算快速傅里叶变换?在编程中,快速傅里叶变换是工程中非常有价值的一类算法,它可以将时域和频域的信号相互...详情>>
2023-11-10 05:50:23zip()函数如何在python中遍历多个列表?
zip()函数如何在python中遍历多个列表?下面我们就python中zip的说明、语法、使用注意点进行讲解,然后带来遍历多个列表的实例。1、说明zip()函...详情>>
2023-11-10 05:38:33热门推荐
python concat函数有何用法?
沸python里函数装饰器怎么使用?
热如何实现python中的continue语句?
热python中的冒泡排序是什么?
新python中str函数是什么
如何使用python实现项目进度显示?
python中ndarray与list转换的方法
python复制文件的方法整理
Python中numpy数组如何添加元素
python有几种可视化图形库?
python中xlwings是什么?
python上下文管理器的基本介绍
Python自动化测试基础必备知识点一
python中OrdereDict如何使用?