包與模塊

在python中一個(gè).py文件就是一個(gè)模塊俊戳,使用模塊既可以保證代碼的重用性惨奕,又能增強(qiáng)程序的結(jié)構(gòu)性和可維護(hù)性雪位。對(duì)于內(nèi)置模塊和第三方模塊提供的現(xiàn)成功能的拿來主義能極大的提高程序員的開發(fā)效率。

首次導(dǎo)入模塊做三件事:

1梨撞、執(zhí)行源文件代碼

2雹洗、產(chǎn)生一個(gè)新的命名空間用于存放源代碼執(zhí)行過程中產(chǎn)生的名字

3、在當(dāng)前執(zhí)行文件的名稱空間生成一個(gè)名字指向新創(chuàng)建的模塊命名空間卧波,引用模塊命名空間中的名字要加上模塊名前綴时肿。

第一次導(dǎo)入模塊將其加載到內(nèi)存空間,之后的重復(fù)導(dǎo)入就會(huì)直接從內(nèi)存中加載已存在的模塊港粱,不會(huì)重復(fù)執(zhí)行導(dǎo)入螃成,通過sys.modules可以查看內(nèi)存中已加載的模塊名。

模塊名應(yīng)該遵循小寫形式查坪。

模塊按分類導(dǎo)入:內(nèi)置模塊寸宏,第三方模塊,自定義模塊偿曙,雖然能通過逗號(hào)分隔不同的模塊击吱,但建議每行只導(dǎo)入一個(gè)模塊,這種行為更加規(guī)范遥昧,可讀性更強(qiáng)覆醇。

我們也可以在函數(shù)中導(dǎo)入模塊,對(duì)比在文件頭部導(dǎo)入模塊術(shù)語全局作用域炭臭,在函數(shù)內(nèi)導(dǎo)入模塊則屬于局部作用域永脓。

模塊內(nèi)變量的導(dǎo)入不加前綴的好處是能使我們的代碼更簡(jiǎn)潔,但是也會(huì)容易和當(dāng)前名稱空間內(nèi)的名字發(fā)生沖突鞋仍,如果當(dāng)前名稱空間存在相同的名字常摧,后定義的名字會(huì)覆蓋之前定義的名字。

只能在模塊最頂層使用 from module import *這種導(dǎo)入方式威创,在函數(shù)內(nèi)是非法的.這種方式很容易產(chǎn)生名稱沖突落午。模塊中可以定義__all__這個(gè)列表變量來存儲(chǔ)要導(dǎo)出的變量名(from module import * 會(huì)自動(dòng)導(dǎo)入__all__中定義的名字。不在all中的名字對(duì)外沒有導(dǎo)出看不到的肚豺。)

循環(huán)導(dǎo)入問題指的是在一個(gè)模塊加載/導(dǎo)入的過程中導(dǎo)入另外一個(gè)模塊溃斋,而在另外一個(gè)模塊中又返回來導(dǎo)入第一個(gè)模塊中的名字,由于第一個(gè)模塊尚未加載完畢吸申,所以引用失敗梗劫、拋出異常享甸,究其根源就是在python中,同一個(gè)模塊只會(huì)在第一次導(dǎo)入時(shí)執(zhí)行其內(nèi)部代碼梳侨,再次導(dǎo)入該模塊時(shí)蛉威,即便是該模塊尚未完全加載完畢也不會(huì)去重復(fù)執(zhí)行內(nèi)部代碼

模塊的四個(gè)通用級(jí)別:

1、使用純python代碼寫的.py文件

2走哺、包含一系列模塊額包

3蚯嫌、使用C編寫的鏈接到python解釋器上的內(nèi)置模塊。

4丙躏、使用C或C++編譯的擴(kuò)展模塊择示。

導(dǎo)入一個(gè)模塊時(shí),如果模塊已加載在內(nèi)存中彼哼,則直接引用对妄,否則會(huì)優(yōu)先查找內(nèi)置模塊湘今,然后按從左到右的順序依次檢索sys.path中定義的路徑敢朱,知道找到模塊對(duì)應(yīng)的文件為止,否則拋出異常摩瞎。

sys.path第一個(gè)路徑通常為空拴签,代表執(zhí)行文件所在的目錄,所以被導(dǎo)入模塊與執(zhí)行文件在同一目錄下肯定是可以正常導(dǎo)入的旗们。而針對(duì)被導(dǎo)入模塊和執(zhí)行文件不在同一目錄的情況蚓哩,為了確保模塊對(duì)應(yīng)的文件能被找到,文件所在的路徑目錄需要被添加到sys.path中上渴。

包是一個(gè)包含__init__.py文件的文件夾岸梨,文件夾內(nèi)可以組織子模塊或子包。

注意:在python3中稠氮,即使包中沒有__init__.py文件曹阔,import導(dǎo)入也不會(huì)報(bào)錯(cuò),在python2中隔披,包中必須包含該文件赃份,否則就會(huì)報(bào)錯(cuò)。包的存在是為了導(dǎo)入使用而不是直接運(yùn)行奢米,包是模塊的一種形式而已抓韩,包本質(zhì)就是一種模塊。

包屬于模塊的一種鬓长,包以及包內(nèi)的模塊均是用來被導(dǎo)入使用的谒拴,而絕非被直接執(zhí)行,首次導(dǎo)入包會(huì)做三件事:

1涉波、執(zhí)行包下的__init__.py文件

2彪薛、產(chǎn)生一個(gè)新的名稱空間用于存放_(tái)_init__.py執(zhí)行過程中產(chǎn)生的名字茂装。

3、在當(dāng)前執(zhí)行文件所在的名稱空間得到一個(gè)指向__init__.py名稱空間的名字善延。導(dǎo)入包時(shí)并不會(huì)導(dǎo)入包下所有的子模塊與子包少态。

包的導(dǎo)入語句分import和from ... import.. 在導(dǎo)入時(shí)都必須遵循一個(gè)原則:凡是在導(dǎo)入時(shí)帶點(diǎn)的,點(diǎn)的左邊都必須是一個(gè)包易遣。

import導(dǎo)入文件時(shí)彼妻,產(chǎn)生名稱空間中的名字來源于文件,import 包豆茫,產(chǎn)生的名稱空間的名字同樣來源于文件侨歉,即包下的__init__.py,導(dǎo)入包本質(zhì)就是在導(dǎo)入該文件揩魂。

針對(duì)包內(nèi)模塊間的相互導(dǎo)入推薦使用相對(duì)導(dǎo)入幽邓。相對(duì)導(dǎo)入只能在包內(nèi)使用,用相對(duì)導(dǎo)入不同目錄下的模塊是非法的火脉。無論Import還是from-import 凡是在導(dǎo)入時(shí)帶點(diǎn)的牵舵,點(diǎn)的左邊必須是包,否則會(huì)語法錯(cuò)誤倦挂。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末畸颅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子方援,更是在濱河造成了極大的恐慌没炒,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犯戏,死亡現(xiàn)場(chǎng)離奇詭異送火,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)先匪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門种吸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胚鸯,你說我怎么就攤上這事骨稿。” “怎么了姜钳?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵坦冠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我哥桥,道長(zhǎng)辙浑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任拟糕,我火速辦了婚禮判呕,結(jié)果婚禮上倦踢,老公的妹妹穿的比我還像新娘。我一直安慰自己侠草,他們只是感情好辱挥,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著边涕,像睡著了一般晤碘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上功蜓,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天园爷,我揣著相機(jī)與錄音,去河邊找鬼式撼。 笑死童社,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的著隆。 我是一名探鬼主播扰楼,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼旅东!你這毒婦竟也來了灭抑?” 一聲冷哼從身側(cè)響起十艾,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤抵代,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后忘嫉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荤牍,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年庆冕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了康吵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡访递,死狀恐怖晦嵌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拷姿,我是刑警寧澤惭载,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站响巢,受9級(jí)特大地震影響描滔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜踪古,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一含长、第九天 我趴在偏房一處隱蔽的房頂上張望券腔。 院中可真熱鬧,春花似錦拘泞、人聲如沸纷纫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涛酗。三九已至,卻和暖如春偷厦,著一層夾襖步出監(jiān)牢的瞬間商叹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工只泼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剖笙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓请唱,卻偏偏與公主長(zhǎng)得像弥咪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子十绑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 模塊和包 一 模塊 1 什么是模塊本橙? 常見的場(chǎng)景:一個(gè)模塊就是一個(gè)包含了python定義和聲明的文件扳躬,文件名就是...
    go以恒閱讀 2,263評(píng)論 0 4
  • Python基礎(chǔ)-包與模塊 寫在前面 如非特別說明,下文均基于Python3 摘要 為重用以及更好的維護(hù)代碼甚亭,Py...
    理查德成閱讀 654評(píng)論 0 2
  • 什么是包贷币?什么是模塊? 模塊:python中每個(gè)python文件都是一個(gè)獨(dú)立的模塊亏狰,是較少的役纹,獨(dú)立的,功能近似的多...
    言燼閱讀 454評(píng)論 0 0
  • 模塊 一暇唾、什么是模塊促脉? 一個(gè)模塊就是一個(gè)包含了python定義和聲明的文件,文件名就是模塊名字加上.py的后綴策州。 ...
    妄想成為正太的包蜀黍閱讀 522評(píng)論 0 0
  • 舉個(gè)例子瘸味,一個(gè)abc.py的文件就是一個(gè)名字叫abc的模塊,一個(gè)xyz.py的文件就是一個(gè)名字叫xyz的模塊抽活。 現(xiàn)...
    沙灘印閱讀 141評(píng)論 0 0