Day04_模塊和包

模塊與包是任何大型程序的核心讨惩,就連 Python 安裝程序本身也是一個(gè)包。

重點(diǎn)涉及有關(guān)模塊和包的常用編程技術(shù)氏身,例如如何組織包巍棱、把大型模塊分割成多個(gè)文件、創(chuàng)建命名空間包蛋欣。同時(shí)航徙,也給出了讓你自定義導(dǎo)入語(yǔ)句的秘籍。

模塊陷虎、包到踏、庫(kù)之間的概念:
模塊(module)其實(shí)就是 py 文件,里面定義了一些函數(shù)泻红、類夭禽、變量等
包(package)是多個(gè)模塊的聚合體形成的文件夾霞掺,里面可以是多個(gè) py 文件谊路,也可以嵌套文件夾
庫(kù)是參考其他編程語(yǔ)言的說法,是指完成一定功能的代碼集合菩彬,在 Python 中的形式就是模塊和包

模塊其實(shí)一個(gè) py 文件缠劝,用來封裝一組功能;包是將一類模塊歸集到一起骗灶,比模塊的概念更大一些惨恭;庫(kù)就是由其它程序員封裝好的功能組,一般比包的概念更大一些耙旦。

模塊

Python 模塊(Module)脱羡,是一個(gè) Python 文件,以 .py 結(jié)尾免都,包含了 Python 對(duì)象定義和Python語(yǔ)句锉罐,方便我們?cè)俅问褂玫臅r(shí)候,提高代碼的復(fù)用率绕娘。通過 import 載入定義好的 Python 模塊脓规。

定義Python 模塊

#support.py 
def print_func( par ):
   print "Hello : ", par
   return

引入Python模塊

模塊定義好后,我們可以使用 import 語(yǔ)句來引入模塊险领,語(yǔ)法如下:

import module1[, module2[,... moduleN]]

在調(diào)用模塊中的函數(shù)時(shí)侨舆,必須這樣引用:

import module.function

當(dāng)解釋器遇到 import 語(yǔ)句秒紧,如果模塊在當(dāng)前的搜索路徑就會(huì)被導(dǎo)入。
搜索路徑是一個(gè)解釋器會(huì)先進(jìn)行搜索的所有目錄的列表挨下。如想要導(dǎo)入模塊 support.py熔恢,需要把命令放在腳本的頂端:

#test.py
# 導(dǎo)入模塊
import support
 
# 現(xiàn)在可以調(diào)用模塊里包含的函數(shù)了
support.print_func("Python")

結(jié)果:Hello:Python

一個(gè)模塊只會(huì)被導(dǎo)入一次,不管你執(zhí)行了多少次import复颈。這樣可以防止導(dǎo)入模塊被一遍又一遍地執(zhí)行绩聘。

from…import 語(yǔ)句

Python 的 from 語(yǔ)句讓你從模塊中導(dǎo)入一個(gè)指定的部分到當(dāng)前命名空間中。語(yǔ)法如下:
from modname import name1[, name2[, ... nameN]]

例如耗啦,要導(dǎo)入模塊 fib 的 fibonacci 函數(shù)凿菩,使用如下語(yǔ)句:
from fib import fibonacci
這個(gè)聲明不會(huì)把整個(gè) fib 模塊導(dǎo)入到當(dāng)前的命名空間中,它只會(huì)將 fib 里的 fibonacci 單個(gè)引入到執(zhí)行這個(gè)聲明的模塊的全局符號(hào)表帜讲。

from…import* 語(yǔ)句

把一個(gè)模塊的所有內(nèi)容全都導(dǎo)入到當(dāng)前的命名空間也是可行的衅谷,只需使用如下聲明:
from modname import *
這提供了一個(gè)簡(jiǎn)單的方法來導(dǎo)入一個(gè)模塊中的所有項(xiàng)目。然而這種聲明不該被過多地使用似将。
例如我們想一次性引入 math 模塊中所有的東西获黔,語(yǔ)句如下:
from math import *

搜索路徑

當(dāng)你導(dǎo)入一個(gè)模塊,Python 解析器對(duì)模塊位置的搜索順序是:
1在验、當(dāng)前目錄
2玷氏、如果不在當(dāng)前目錄,Python 則搜索在 shell 變量 PYTHONPATH 下的每個(gè)目錄腋舌。
3盏触、如果都找不到,Python會(huì)察看默認(rèn)路徑块饺。UNIX下赞辩,默認(rèn)路徑一般為/usr/local/lib/python/。
模塊搜索路徑存儲(chǔ)在 system 模塊的 sys.path 變量中授艰。變量里包含當(dāng)前目錄辨嗽,PYTHONPATH和由安裝過程決定的默認(rèn)目錄。

PYTHONPATH 變量

作為環(huán)境變量淮腾,PYTHONPATH 由裝在一個(gè)列表里的許多目錄組成糟需。PYTHONPATH 的語(yǔ)法和 shell 變量 PATH 的一樣。
在 Windows 系統(tǒng)谷朝,典型的 PYTHONPATH 如下:
set PYTHONPATH=c:\python27\lib;

Python中的包

包是一個(gè)分層次的文件目錄結(jié)構(gòu)洲押,它定義了一個(gè)由模塊及子包,和子包下的子包等組成的 Python 的應(yīng)用環(huán)境徘禁。
簡(jiǎn)單來說诅诱,包就是文件夾,但該文件夾下必須存在 init.py 文件, 該文件的內(nèi)容可以為空送朱。init.py 用于標(biāo)識(shí)當(dāng)前文件夾是一個(gè)包娘荡。
考慮一個(gè)在 package_pythonStudy 目錄下的 pythonStudy1.py干旁、pythonStudy2.py、init.py 文件炮沐,test.py 為測(cè)試調(diào)用包的代碼争群,目錄結(jié)構(gòu)如下:

test.py
package_pythonStudy
|-- init.py
|-- pythonStudy1.py
|-- pythonStudy2.py

示例:

#package_pythonStudy/pythonStudy1.py
def study1():
   print "I'm in pythonStudy1"
#package_pythonStudy/pythonStudy2.py
def study2():
   print "I'm in pythonStudy2"
#package_pythonStudy/__init__.py
if __name__ == '__main__':
    print '作為主程序運(yùn)行'
else:
    print 'package_pythonStudy 初始化'

然后我們?cè)?package_pythonStudy 同級(jí)目錄下創(chuàng)建 test.py 來調(diào)用 package_pythonStudy包

# 導(dǎo)入 package_pythonStudy 包
from package_pythonStudy.pythonStudy1 import study1
from package_pythonStudy.pythonStudy2 import study2
 
study1()
study2()

運(yùn)行結(jié)果:
package_pythonStudy 初始化
I'm in pythonStudy1
I'm in pythonStudy2

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市大年,隨后出現(xiàn)的幾起案子换薄,更是在濱河造成了極大的恐慌,老刑警劉巖翔试,帶你破解...
    沈念sama閱讀 223,126評(píng)論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轻要,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡垦缅,警方通過查閱死者的電腦和手機(jī)冲泥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來壁涎,“玉大人凡恍,你說我怎么就攤上這事≌颍” “怎么了嚼酝?”我有些...
    開封第一講書人閱讀 169,941評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)竟坛。 經(jīng)常有香客問我闽巩,道長(zhǎng),這世上最難降的妖魔是什么流码? 我笑而不...
    開封第一講書人閱讀 60,294評(píng)論 1 300
  • 正文 為了忘掉前任又官,我火速辦了婚禮延刘,結(jié)果婚禮上漫试,老公的妹妹穿的比我還像新娘。我一直安慰自己碘赖,他們只是感情好驾荣,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著普泡,像睡著了一般播掷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撼班,一...
    開封第一講書人閱讀 52,874評(píng)論 1 314
  • 那天歧匈,我揣著相機(jī)與錄音,去河邊找鬼砰嘁。 笑死件炉,一個(gè)胖子當(dāng)著我的面吹牛勘究,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播斟冕,決...
    沈念sama閱讀 41,285評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼口糕,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了磕蛇?” 一聲冷哼從身側(cè)響起景描,我...
    開封第一講書人閱讀 40,249評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎秀撇,沒想到半個(gè)月后超棺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,760評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呵燕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評(píng)論 3 343
  • 正文 我和宋清朗相戀三年说搅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虏等。...
    茶點(diǎn)故事閱讀 40,973評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弄唧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出霍衫,到底是詐尸還是另有隱情候引,我是刑警寧澤,帶...
    沈念sama閱讀 36,631評(píng)論 5 351
  • 正文 年R本政府宣布敦跌,位于F島的核電站澄干,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏柠傍。R本人自食惡果不足惜麸俘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惧笛。 院中可真熱鬧从媚,春花似錦、人聲如沸患整。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)各谚。三九已至紧憾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間昌渤,已是汗流浹背赴穗。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評(píng)論 1 275
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人般眉。 一個(gè)月前我還...
    沈念sama閱讀 49,431評(píng)論 3 379
  • 正文 我出身青樓加矛,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親煤篙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子斟览,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評(píng)論 2 361

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