<abbr id="ciwa6"><option id="ciwa6"></option></abbr>
  • <sup id="ciwa6"><kbd id="ciwa6"></kbd></sup>
    <small id="ciwa6"></small>
  • 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

    400-811-9990
    手機(jī)站
    千鋒教育

    千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

    千鋒教育

    掃一掃進(jìn)入千鋒手機(jī)站

    領(lǐng)取全套視頻
    千鋒教育

    關(guān)注千鋒學(xué)習(xí)站小程序
    隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

    上海
    • 北京
    • 鄭州
    • 武漢
    • 成都
    • 西安
    • 沈陽
    • 廣州
    • 南京
    • 深圳
    • 大連
    • 青島
    • 杭州
    • 重慶
    當(dāng)前位置:成都千鋒IT培訓(xùn)  >  技術(shù)干貨  >  python的查找器

    python的查找器

    來源:千鋒教育
    發(fā)布人:xqq
    時(shí)間: 2023-11-05 20:02:50

    一、元路徑查找器(metapathfinder)

    元路徑查找器的工作就是看是否能找到模塊。這些查找器存放在sys.meta_path中以供Python遍歷(當(dāng)然它們也可以通過import勾子返回,參見上面的例子)。每個(gè)查找器必須實(shí)現(xiàn)find_spec方法。如果一個(gè)查找器知道怎么處理將引入的模塊,find_spec將返回一個(gè)ModuleSpec對(duì)象(參見下節(jié))否則返回None。

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

    內(nèi)置模塊查找器

    凍結(jié)模塊查找器

    基于路徑的查找器

    這里我們想重點(diǎn)聊一聊基于路徑的查找器(pathbasedfinder)。它用于搜索一系列import路徑,每個(gè)路徑都用來查找是否有對(duì)應(yīng)的模塊可以加載。默認(rèn)的路徑查找器實(shí)現(xiàn)了所有在文件系統(tǒng)的特殊文件中查找模塊的功能,這些特殊文件包括Python源文件(.py文件),Python編譯后代碼文件(.pyc文件),共享庫文件(.so文件)。如果Python標(biāo)準(zhǔn)庫中包含zipimport,那么相關(guān)的文件也可用來查找可引入的模塊。

    路徑查找器不僅限于文件系統(tǒng)中的文件,它還可以上URL數(shù)據(jù)庫的查詢,或者其他任何可以用字符串表示的地址。

    你可以用上節(jié)提供的勾子來實(shí)現(xiàn)對(duì)同類型地址的模塊查找。例如,如果你想通過URL來import模塊,那么你可以寫一個(gè)import勾子來解析這個(gè)URL并且返回一個(gè)路徑查找器。

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

    二、ModuleSpec對(duì)象

    每個(gè)元路徑查找器必須實(shí)現(xiàn)find_spec方法,如果該查找器知道如果處理要引入的模塊,那么這個(gè)方法將返回一個(gè)ModuleSpec對(duì)象。這個(gè)對(duì)象有兩個(gè)屬性值得一提,一個(gè)是模塊的名字,而另一個(gè)則是查找器。如果一個(gè)ModuleSpec對(duì)象的查找器是None,那么類似ImportError:missingloader的異常將會(huì)被拋出。查找器將用來創(chuàng)建和執(zhí)行一個(gè)模塊(見下節(jié))。

    你可以通過.__spec__來查找模塊的ModuleSpec對(duì)象:

    In[1]:importsys

    In[2]:sys.__spec__

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

    三、加載器(loader)

    加載器通過create_module來創(chuàng)建模塊以及exec_module來執(zhí)行模塊。通常如果一個(gè)模塊是一個(gè)Python模塊(非內(nèi)置模塊或者動(dòng)態(tài)擴(kuò)展),那么該模塊的代碼需要在模塊的__dict__空間上執(zhí)行。如果模塊的代碼無法執(zhí)行,那么就會(huì)拋出ImportError異常,或者其他在執(zhí)行過程中的異常也會(huì)被拋出。

    絕大多數(shù)情況下,查找器和加載器是同一個(gè)東西。這種情況下,查找器的find_spec方法返回的ModuleSpec對(duì)象的loader屬性將指向它自己。

    我們可以用create_module來動(dòng)態(tài)創(chuàng)建一個(gè)模塊,如果它返回NonePython會(huì)自動(dòng)創(chuàng)建一個(gè)模塊。

    以上內(nèi)容為大家介紹了python的查找器,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。

    聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

    猜你喜歡LIKE

    python delattr函數(shù)如何使用?

    2023-11-10

    python time.strptime的格式化

    2023-11-10

    pythonGIL在Python多線程的應(yīng)用

    2023-11-10

    最新文章NEW

    python中pdb模塊怎么用?

    2023-11-10

    Python如何截圖保存?

    2023-11-10

    python?中缺少module怎么辦?

    2023-11-10

    相關(guān)推薦HOT

    更多>>

    快速通道 更多>>

    最新開班信息 更多>>

    網(wǎng)友熱搜 更多>>