黄视频网站在线免费观看-黄视频网站在线看-黄视频网站在线观看-黄视频网站免费看-黄视频网站免费观看-黄视频网站免费

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

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

千鋒教育

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

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

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

當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > Python 的 import 機(jī)制

Python 的 import 機(jī)制

來(lái)源:千鋒教育
發(fā)布人:xqq
時(shí)間: 2023-11-07 13:15:58 1699334158

1.1什么是import機(jī)制?

通常來(lái)講,在一段Python代碼中去執(zhí)行引用另一個(gè)模塊中的代碼,就需要使用Python的import機(jī)制。import語(yǔ)句是觸發(fā)import機(jī)制最常用的手段,但并不是唯一手段。

importlib.import_module和__import__函數(shù)也可以用來(lái)引入其他模塊的代碼。

1.2import是如何執(zhí)行的?

import語(yǔ)句會(huì)執(zhí)行兩步操作:

搜索需要引入的模塊

將模塊的名字做為變量綁定到局部變量中

搜索步驟實(shí)際上是通過(guò)__import__函數(shù)完成的,而其返回值則會(huì)作為變量被綁定到局部變量中。下面我們會(huì)詳細(xì)聊到__import__函數(shù)是如果運(yùn)作的。

二、import機(jī)制概覽

下圖是import機(jī)制的概覽圖。不難看出,當(dāng)import機(jī)制被觸發(fā)時(shí),Python首先會(huì)去sys.modules中查找該模塊是否已經(jīng)被引入過(guò),如果該模塊已經(jīng)被引入了,就直接調(diào)用它,否則再進(jìn)行下一步。這里sys.modules可以看做是一個(gè)緩存容器。值得注意的是,如果sys.modules中對(duì)應(yīng)的值是None那么就會(huì)拋出一個(gè)ModuleNotFoundError異常。下面是一個(gè)簡(jiǎn)單的實(shí)驗(yàn):

In[1]:importsys

In[2]:sys.modules['os']=None

In[3]:importos

---------------------------------------------------------------------------

ModuleNotFoundErrorTraceback(mostrecentcalllast)

in

---->1importos

ModuleNotFoundError:importofoshalted;Noneinsys.modules

如果在sys.modules找到了對(duì)應(yīng)的module,并且這個(gè)import是由import語(yǔ)句觸發(fā)的,那么下一步將對(duì)把對(duì)應(yīng)的變量綁定到局部變量中。

如果沒(méi)有發(fā)現(xiàn)任何緩存,那么系統(tǒng)將進(jìn)行一個(gè)全新的import過(guò)程。在這個(gè)過(guò)程中Python將遍歷sys.meta_path來(lái)尋找是否有符合條件的元路徑查找器(metapathfinder)。sys.meta_path是一個(gè)存放元路徑查找器的列表。它有三個(gè)默認(rèn)的查找器:

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

凍結(jié)模塊(frozenmodule)查找器

基于路徑的模塊查找器。

In[1]:importsys

In[2]:sys.meta_path

Out[2]:

[_frozen_importlib.BuiltinImporter,

_frozen_importlib.FrozenImporter,

_frozen_importlib_external.PathFinder]

查找器的find_spec方法決定了該查找器是否能處理要引入的模塊并返回一個(gè)ModeuleSpec對(duì)象,這個(gè)對(duì)象包含了用來(lái)加載這個(gè)模塊的相關(guān)信息。如果沒(méi)有合適的ModuleSpec對(duì)象返回,那么系統(tǒng)將查看sys.meta_path的下一個(gè)元路徑查找器。如果遍歷sys.meta_path都沒(méi)有找到合適的元路徑查找器,將拋出ModuleNotFoundError。引入一個(gè)不存在的模塊就會(huì)發(fā)生這種情況,因?yàn)閟ys.meta_path中所有的查找器都無(wú)法處理這種情況:

In[1]:importnosuchmodule

---------------------------------------------------------------------------

ModuleNotFoundErrorTraceback(mostrecentcalllast)

in

---->1importnosuchmodule

ModuleNotFoundError:Nomodulenamed'nosuchmodule'

但是,如果這個(gè)手動(dòng)添加一個(gè)可以處理這個(gè)模塊的查找器,那么它也是可以被引入的:

In[1]:importsys

...:

...:fromimportlib.abcimportMetaPathFinder

...:fromimportlib.machineryimportModuleSpec

...:

...:classNoSuchModuleFinder(MetaPathFinder):

...:deffind_spec(self,fullname,path,target=None):

...:returnModuleSpec('nosuchmodule',None)

...:

...:#don'tdothisinyourscript

...:sys.meta_path=[NoSuchModuleFinder()]

...:

...:importnosuchmodule

---------------------------------------------------------------------------

ImportErrorTraceback(mostrecentcalllast)

in

11sys.meta_path=[NoSuchModuleFinder()]

12

--->13importnosuchmodule

ImportError:missingloader

可以看到,當(dāng)我們告訴系統(tǒng)如何去find_spec的時(shí)候,是不會(huì)拋出ModuleNotFound異常的。但是要成功加載一個(gè)模塊,還需要加載器loader。

加載器是ModuleSpec對(duì)象的一個(gè)屬性,它決定了如何加載和執(zhí)行一個(gè)模塊。如果說(shuō)ModuleSpec對(duì)象是“師父領(lǐng)進(jìn)門”的話,那么加載器就是“修行在個(gè)人”了。在加載器中,你完全可以決定如何來(lái)加載以及執(zhí)行一個(gè)模塊。這里的決定,不僅僅是加載和執(zhí)行模塊本身,你甚至可以修改一個(gè)模塊:

In[1]:importsys

...:fromtypesimportModuleType

...:fromimportlib.machineryimportModuleSpec

...:fromimportlib.abcimportMetaPathFinder,Loader

...:

...:classModule(ModuleType):

...:def__init__(self,name):

...:self.x=1

...:self.name=name

...:

...:classExampleLoader(Loader):

...:defcreate_module(self,spec):

...:returnModule(spec.name)

...:

...:defexec_module(self,module):

...:module.y=2

...:

...:classExampleFinder(MetaPathFinder):

...:deffind_spec(self,fullname,path,target=None):

...:returnModuleSpec('module',ExampleLoader())

...:

...:sys.meta_path=[ExampleFinder()]

In[2]:importmodule

In[3]:module

Out[3]:)>

In[4]:module.x

Out[4]:1

In[5]:module.y

Out[5]:2

從上面的例子可以看到,一個(gè)加載器通常有兩個(gè)重要的方法create_module和exec_module需要實(shí)現(xiàn)。如果實(shí)現(xiàn)了exec_module方法,那么create_module則是必須的。如果這個(gè)import機(jī)制是由import語(yǔ)句發(fā)起的,那么create_module方法返回的模塊對(duì)象對(duì)應(yīng)的變量將會(huì)被綁定到當(dāng)前的局部變量中。如果一個(gè)模塊因此成功被加載了,那么它將被緩存到sys.modules。如果這個(gè)模塊再次被加載,那么sys.modules的緩存將會(huì)被直接引用。

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

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
99久久精品国产国产毛片| a级精品九九九大片免费看| 你懂的国产精品| 精品视频在线观看一区二区三区| 国产不卡福利| 韩国三级视频网站| 国产伦精品一区二区三区在线观看| 亚洲精品久久久中文字| 精品国产一区二区三区免费 | 香蕉视频一级| 精品视频在线看| 久久国产一久久高清| 亚洲女人国产香蕉久久精品| 日日夜人人澡人人澡人人看免| 美女被草网站| 国产福利免费观看| 亚洲 激情| 日韩在线观看免费完整版视频| 国产91精品系列在线观看| 黄色福利| 日韩av成人| 成人高清视频免费观看| 你懂的日韩| 亚欧成人乱码一区二区| 国产视频一区在线| 精品久久久久久中文字幕一区 | 四虎论坛| 在线观看成人网 | 尤物视频网站在线| 久久福利影视| 天天做日日爱夜夜爽| 精品视频一区二区三区免费| 国产成人精品综合| 精品国产一区二区三区久久久狼| 日日夜夜婷婷| 日韩综合| 亚洲 激情| 国产不卡高清在线观看视频| 久久99中文字幕久久| 欧美日本韩国| 国产精品123| 麻豆系列 在线视频| 国产网站在线| 91麻豆国产| 日日日夜夜操| 黄视频网站在线免费观看| 国产伦精品一区二区三区在线观看| 日韩一级精品视频在线观看| 国产福利免费视频| 美国一区二区三区| 日韩在线观看免费完整版视频| 九九热国产视频| 黄视频网站在线免费观看| 日本在线不卡视频| 欧美一级视频免费| 国产国语对白一级毛片| 91麻豆精品国产片在线观看| 美国一区二区三区| 国产麻豆精品| 国产网站免费| 日韩一级精品视频在线观看| 日韩av东京社区男人的天堂| 精品国产亚洲人成在线| 久久国产精品永久免费网站| 精品久久久久久中文字幕一区 | 高清一级毛片一本到免费观看| 日韩在线观看视频网站| 日韩av片免费播放| 九九九国产| 美女免费精品视频在线观看| 成人高清视频在线观看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 日韩欧美一二三区| 成人免费福利片在线观看| 美国一区二区三区| 91麻豆国产| 黄视频网站免费| 超级乱淫伦动漫| 国产亚洲免费观看| 久久国产一区二区| 国产精品免费精品自在线观看| 黄视频网站在线观看| 成人在免费观看视频国产| 日日夜人人澡人人澡人人看免| 国产精品123| 天天做日日爱| 久久精品免视看国产成人2021| 香蕉视频一级| 国产91素人搭讪系列天堂| 国产91素人搭讪系列天堂| 国产亚洲精品成人a在线| 亚洲天堂在线播放| 国产成人精品综合在线| 欧美18性精品| 欧美电影免费| 99久久精品国产免费| 亚洲精品中文字幕久久久久久| 高清一级做a爱过程不卡视频| 免费一级生活片| 91麻豆精品国产自产在线| 国产麻豆精品免费密入口| 精品国产一区二区三区久| 国产麻豆精品高清在线播放| 深夜做爰性大片中文| 午夜在线亚洲| 欧美大片aaaa一级毛片| 黄色福利| 国产精品免费久久| 成人a级高清视频在线观看| 欧美国产日韩精品| 日韩av成人| 国产不卡在线看| 精品久久久久久中文字幕一区 | 免费国产一级特黄aa大片在线| 欧美日本韩国| 九九久久国产精品大片| 国产麻豆精品视频| 国产欧美精品午夜在线播放| 国产极品白嫩美女在线观看看| 精品国产三级a| 九九久久99| 久久99这里只有精品国产| 欧美爱爱网| 日韩专区第一页| 一级片片| 国产极品白嫩美女在线观看看| 在线观看成人网 | 久草免费在线观看| 99久久精品费精品国产一区二区| 欧美激情中文字幕一区二区| 日日日夜夜操| 九九久久国产精品大片| 成人免费观看男女羞羞视频| 欧美爱色| 久久精品人人做人人爽97| 精品国产亚洲一区二区三区| 国产一级强片在线观看| 欧美1区| 999久久66久6只有精品| 麻豆系列 在线视频| 成人免费网站久久久| 国产国语在线播放视频| 欧美另类videosbestsex高清| 在线观看成人网 | 国产一区二区精品尤物| 精品视频一区二区三区免费| 黄视频网站在线免费观看| 国产不卡在线播放| 日韩免费在线视频| 欧美爱色| 中文字幕一区二区三区精彩视频| 国产成a人片在线观看视频| 亚洲第一色在线| 久久国产精品自由自在| 精品国产一区二区三区久| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 91麻豆精品国产高清在线| 国产伦久视频免费观看 视频| 精品视频在线观看一区二区| 日本在线www| 日韩av东京社区男人的天堂| 国产不卡在线观看视频| 国产国语在线播放视频| 精品久久久久久综合网| 日韩免费片| 久久久成人影院| 精品国产一区二区三区精东影业 | 精品国产香蕉在线播出| 黄视频网站在线看| 午夜欧美福利| 精品视频在线观看一区二区| 99热热久久| 国产91精品一区| 久久久成人网| 国产极品白嫩美女在线观看看| 欧美激情一区二区三区视频高清| 麻豆网站在线看| 色综合久久天天综合| 久草免费在线视频| 免费一级生活片| 国产91丝袜高跟系列| 欧美激情一区二区三区视频 | 精品久久久久久影院免费| 久久久久久久久综合影视网| 九九精品久久| a级毛片免费观看网站| 国产精品自拍一区| 99色视频| 你懂的日韩| 日韩在线观看免费完整版视频| 日日日夜夜操| 美女免费精品视频在线观看| 日韩一级黄色片| 国产成人啪精品| 日韩欧美一及在线播放| 国产高清视频免费| 日本在线不卡免费视频一区| 九九久久99综合一区二区| 成人在免费观看视频国产| 99久久精品国产麻豆|