python模塊導(dǎo)入詳解

python中的封裝層級(jí)可以簡(jiǎn)單的看成:函數(shù)->類->模塊->包恩溅,其中模塊相當(dāng)于一個(gè)文件瘤礁,包是模塊的集合批狱,相當(dāng)于一個(gè)文件夾裸准。文件夾下需要__init__.py作為目錄,__init__.py也可以為空但必須存在赔硫。

一炒俱、模塊調(diào)用和靜態(tài)導(dǎo)入

在調(diào)用上,模塊和包應(yīng)該是同等級(jí)別的爪膊,即包可以看成是模塊权悟,以下以模塊代稱:
在模塊A中定義了一個(gè)函數(shù) def a(),如要在其他模塊中使用推盛,有兩種方式:

# 方式一
improt A
A.a()

# 方式二
from A improt *
a()

# 方式三
from A import a
a()
  1. 方式一和方式二三調(diào)用函數(shù)形式不同峦阁,據(jù)說方式二三是直接引用了絕對(duì)路徑所以不需要加模塊名。但這樣可能會(huì)導(dǎo)致不同模塊中的相同函數(shù)名被覆蓋(相同時(shí)以導(dǎo)入最后一個(gè)模塊為準(zhǔn))耘成。

  2. 方式二會(huì)導(dǎo)入整個(gè)A榔昔,方式三僅導(dǎo)入a部分代碼驹闰。如果頻繁使用a,建議使用方式三撒会,提高效率嘹朗。

  3. 如果想要控制方式二導(dǎo)入的模塊,即不需要全部導(dǎo)入诵肛,可以在__init__.py包含import xxx屹培,__all__=[xxx]。想要導(dǎo)入哪些模塊怔檩,加入到代碼中即可褪秀。

  4. 方式二會(huì)保護(hù)模塊A中的保護(hù)變量(以_開頭)和私有變量(以__開頭),不會(huì)對(duì)這些變量進(jìn)行導(dǎo)入薛训。方式三會(huì)導(dǎo)入這些變量媒吗,其中保護(hù)變量名稱不變,但私有變量會(huì)變成_類名__私有變量名许蓖,總之是不建議對(duì)私有變量進(jìn)行強(qiáng)行訪問蝴猪。

  5. import就相當(dāng)于把代碼運(yùn)行了一遍调衰。

二膊爪、模塊重命名

使用from xxx import A as B,可使導(dǎo)入的部分重新命名嚎莉,適合于存在多個(gè)相同名字米酬。調(diào)用時(shí)使用B.xxx即可。

三趋箩、路徑和動(dòng)態(tài)導(dǎo)入

在模塊引用中赃额,無論是import的是相對(duì)路徑還是絕對(duì)路徑都涉及路徑的問題。
當(dāng)導(dǎo)入一個(gè)模塊時(shí)叫确,python查找順序:

  1. 當(dāng)前目錄
  2. PYTHONPATH 下的每個(gè)目錄
  3. 默認(rèn)路徑(安裝過程中選擇的)

以上搜索的路徑都存儲(chǔ)在sys.path中跳芳。

一些關(guān)于路徑的常用函數(shù):
os.path.abspath(__file__)可以獲得當(dāng)前模塊的絕對(duì)路徑。
os.path.dirname可以獲取當(dāng)前模塊所在文件夾路徑竹勉。
sys.path.insert(0,x)可將x插入到sys.path飞盆,import會(huì)查找sys,path,進(jìn)而找到x的路徑次乓。
改變PYTHONPATH可以使用類似set PYTHONPATH=c:\python27\lib;命令吓歇。
os.path.join(DIR,'B.py')可做拼接,最終路徑為DIR/B.py

前面所提到的三種導(dǎo)入方式都是靜態(tài)導(dǎo)入票腰,如果利用獲取路徑的函數(shù)取到了類似Dir = “E:\xxxx\xx\xxxxxx”城看,想要導(dǎo)入這個(gè)絕對(duì)地址,是無法使用靜態(tài)導(dǎo)入的杏慰,這時(shí)可以使用動(dòng)態(tài)導(dǎo)入测柠。

# 方式一
A = __import__("A")

# 方式二
A = importlib.import_module("A")
  1. 方式一在導(dǎo)入子模塊時(shí)會(huì)出現(xiàn)問題炼鞠,例如
__import__("ywzd.Tasks")
<module 'ywzd' from 'E:\\web_agent\\webagent3\\ywzd\\ywzd\\__init__.py'>

導(dǎo)入的依然是整個(gè)模塊,舍棄了點(diǎn)右側(cè)子模塊鹃愤。

  1. 方式一就算使用了fromlist簇搅,無論怎么設(shè)置依然導(dǎo)入的是整個(gè)路徑,包含點(diǎn)的子模塊软吐。
YWZD = __import__("ywzd.Tasks", fromlist=['Actions'])
<module 'ywzd.Tasks' from 'E:\\web_agent\\webagent3\\ywzd\\ywzd\\Tasks\\__init__.py'>
  1. 使用方式二可以導(dǎo)入想要的子模塊
import importlib
YWZD = importlib.import_module('ywzd.Tasks')
<module 'ywzd.Tasks' from 'E:\\web_agent\\webagent3\\ywzd\\ywzd\\Tasks\\__init__.py'>

四瘩将、dir()、globals()凹耙、locals()和reload()

  1. dir返回的是list姿现,當(dāng)前模塊的所有模塊、函數(shù)肖抱、變量备典,就是所有對(duì)象。
  2. globals()和locals()返回dict意述,是當(dāng)前能訪問到的所有全局變量和局部變量提佣。
  3. reload()則用于重新加載模塊,即重新執(zhí)行一下import荤崇。

五拌屏、特別注意

  1. 協(xié)程之間可以共享變量,用galobal即可术荤,將變量放在一個(gè)公共模塊中即都可以倚喂。
  2. 進(jìn)程之間不可共享變量,所以在初始化程序時(shí)會(huì)各自加載一次公用模塊瓣戚,可將子進(jìn)程需要區(qū)分的東西放入公用模塊中端圈,由公用模塊去讀取文件,可實(shí)現(xiàn)共享內(nèi)容子库。這種方式由于系統(tǒng)自帶對(duì)文件的讀寫鎖舱权,可以說是很安全,但是不可大量使用仑嗅,影響性能宴倍。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市无畔,隨后出現(xiàn)的幾起案子啊楚,更是在濱河造成了極大的恐慌,老刑警劉巖浑彰,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恭理,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡郭变,警方通過查閱死者的電腦和手機(jī)颜价,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門涯保,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人周伦,你說我怎么就攤上這事夕春。” “怎么了专挪?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵及志,是天一觀的道長。 經(jīng)常有香客問我寨腔,道長速侈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任迫卢,我火速辦了婚禮倚搬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乾蛤。我一直安慰自己每界,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布家卖。 她就那樣靜靜地躺著眨层,像睡著了一般。 火紅的嫁衣襯著肌膚如雪篡九。 梳的紋絲不亂的頭發(fā)上谐岁,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天醋奠,我揣著相機(jī)與錄音榛臼,去河邊找鬼。 笑死窜司,一個(gè)胖子當(dāng)著我的面吹牛沛善,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播塞祈,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼金刁,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了议薪?” 一聲冷哼從身側(cè)響起尤蛮,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎斯议,沒想到半個(gè)月后产捞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哼御,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年坯临,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了焊唬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡看靠,死狀恐怖赶促,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挟炬,我是刑警寧澤鸥滨,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站谤祖,受9級(jí)特大地震影響爵赵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泊脐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一空幻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧容客,春花似錦秕铛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至供置,卻和暖如春谨湘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芥丧。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來泰國打工紧阔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人续担。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓擅耽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親物遇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乖仇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

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