python學(xué)習(xí)-模塊

模塊

在計(jì)算機(jī)程序的開(kāi)發(fā)過(guò)程中飞袋,隨著程序代碼越寫(xiě)越多戳气,在一個(gè)文件里代碼就會(huì)越來(lái)越長(zhǎng),越來(lái)越不容易維護(hù)巧鸭。
為了編寫(xiě)可維護(hù)的代碼瓶您,我們把很多函數(shù)分組,分別放到不同的文件里蹄皱,這樣览闰,每個(gè)文件包含的代碼就相對(duì)較少,很多編程語(yǔ)言都采用這種組織代碼的方式巷折。在Python中压鉴,一個(gè).py文件就稱(chēng)之為一個(gè)模塊(Module)。
使用模塊有什么好處锻拘?
最大的好處是大大提高了代碼的可維護(hù)性油吭。其次,編寫(xiě)代碼不必從零開(kāi)始署拟。當(dāng)一個(gè)模塊編寫(xiě)完畢婉宰,就可以被其他地方引用。我們?cè)诰帉?xiě)程序的時(shí)候推穷,也經(jīng)常引用其他模塊心包,包括Python內(nèi)置的模塊和來(lái)自第三方的模塊。
使用模塊還可以避免函數(shù)名和變量名沖突馒铃。相同名字的函數(shù)和變量完全可以分別存在不同的模塊中蟹腾,因此痕惋,我們自己在編寫(xiě)模塊時(shí),不必考慮名字會(huì)與其他模塊沖突娃殖。但是也要注意值戳,盡量不要與內(nèi)置函數(shù)名字沖突。點(diǎn)這里查看Python的所有內(nèi)置函數(shù)炉爆。
你也許還想到堕虹,如果不同的人編寫(xiě)的模塊名相同怎么辦?為了避免模塊名沖突芬首,Python又引入了按目錄來(lái)組織模塊的方法赴捞,稱(chēng)為包(Package)。
舉個(gè)例子衩辟,一個(gè)abc.py
的文件就是一個(gè)名字叫abc
的模塊螟炫,一個(gè)xyz.py
的文件就是一個(gè)名字叫xyz
的模塊。

1.1 使用模塊

Python本身就內(nèi)置了很多非常有用的模塊艺晴,只要安裝完畢昼钻,這些模塊就可以立刻使用。

我們以?xún)?nèi)建的sys模塊為例封寞,編寫(xiě)一個(gè)hello的模塊:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' a test module '

__author__ = 'Michael Liao'

import sys

def test():
    args = sys.argv
    if len(args)==1:
        print('Hello, world!')
    elif len(args)==2:
        print('Hello, %s!' % args[1])
    else:
        print('Too many arguments!')

if __name__=='__main__':
    test()

第1行和第2行是標(biāo)準(zhǔn)注釋?zhuān)?行注釋可以讓這個(gè)hello.py文件直接在Unix/Linux/Mac上運(yùn)行然评,第2行注釋表示.py文件本身使用標(biāo)準(zhǔn)UTF-8編碼;

第4行是一個(gè)字符串狈究,表示模塊的文檔注釋?zhuān)魏文K代碼的第一個(gè)字符串都被視為模塊的文檔注釋?zhuān)?/p>

第6行使用__author__變量把作者寫(xiě)進(jìn)去碗淌,這樣當(dāng)你公開(kāi)源代碼后別人就可以瞻仰你的大名;

以上就是Python模塊的標(biāo)準(zhǔn)文件模板抖锥,當(dāng)然也可以全部刪掉不寫(xiě)亿眠,但是,按標(biāo)準(zhǔn)辦事肯定沒(méi)錯(cuò)磅废。

后面開(kāi)始就是真正的代碼部分纳像。

你可能注意到了,使用sys模塊的第一步拯勉,就是導(dǎo)入該模塊:

import sys
導(dǎo)入sys模塊后竟趾,我們就有了變量sys指向該模塊,利用sys這個(gè)變量宫峦,就可以訪問(wèn)sys模塊的所有功能岔帽。

sys模塊有一個(gè)argv變量,用list存儲(chǔ)了命令行的所有參數(shù)导绷。argv至少有一個(gè)元素犀勒,因?yàn)榈谝粋€(gè)參數(shù)永遠(yuǎn)是該.py文件的名稱(chēng),例如:

運(yùn)行python3 hello.py獲得的sys.argv就是['hello.py']

運(yùn)行python3 hello.py Michael獲得的sys.argv就是['hello.py', 'Michael]贾费。

最后枚碗,注意到這兩行代碼:

if __name__=='__main__':
    test()

當(dāng)我們?cè)诿钚羞\(yùn)行hello模塊文件時(shí),Python解釋器把一個(gè)特殊變量__name__置為__main__铸本,而如果在其他地方導(dǎo)入該hello模塊時(shí),if判斷將失敗遵堵,因此箱玷,這種if測(cè)試可以讓一個(gè)模塊通過(guò)命令行運(yùn)行時(shí)執(zhí)行一些額外的代碼,最常見(jiàn)的就是運(yùn)行測(cè)試陌宿。

1.2作用域

在一個(gè)模塊中锡足,我們可能會(huì)定義很多函數(shù)和變量,但有的函數(shù)和變量我們希望給別人使用壳坪,有的函數(shù)和變量我們希望僅僅在模塊內(nèi)部使用舶得。在Python中,是通過(guò)_前綴來(lái)實(shí)現(xiàn)的爽蝴。

正常的函數(shù)和變量名是公開(kāi)的(public)沐批,可以被直接引用,比如:abc蝎亚,x123九孩,PI等;

類(lèi)似__xxx__這樣的變量是特殊變量发框,可以被直接引用躺彬,但是有特殊用途,比如上面的__author__梅惯,__name__就是特殊變量宪拥,hello模塊定義的文檔注釋也可以用特殊變量__doc__訪問(wèn),我們自己的變量一般不要用這種變量名铣减;

類(lèi)似_xxx__xxx這樣的函數(shù)或變量就是非公開(kāi)的(private)她君,不應(yīng)該被直接引用,比如_abc徙歼,__abc等犁河;

之所以我們說(shuō),private函數(shù)和變量“不應(yīng)該”被直接引用魄梯,而不是“不能”被直接引用桨螺,是因?yàn)镻ython并沒(méi)有一種方法可以完全限制訪問(wèn)private函數(shù)或變量,但是酿秸,從編程習(xí)慣上不應(yīng)該引用private函數(shù)或變量灭翔。

private函數(shù)或變量不應(yīng)該被別人引用,那它們有什么用呢?請(qǐng)看例子:

def _private_1(name):
    return 'Hello, %s' % name

def _private_2(name):
    return 'Hi, %s' % name

def greeting(name):
    if len(name) > 3:
        return _private_1(name)
    else:
        return _private_2(name)

我們?cè)谀K里公開(kāi)greeting()函數(shù)肝箱,而把內(nèi)部邏輯用private函數(shù)隱藏起來(lái)了哄褒,這樣,調(diào)用greeting()函數(shù)不用關(guān)心內(nèi)部的private函數(shù)細(xì)節(jié)煌张,這也是一種非常有用的代碼封裝和抽象的方法呐赡,即:

外部不需要引用的函數(shù)全部定義成private,只有外部需要引用的函數(shù)才定義為public骏融。

1.3 安裝第三方模塊

在Python中链嘀,安裝第三方模塊,是通過(guò)包管理工具pip完成的档玻。
如果你正在使用Mac或Linux怀泊,安裝pip本身這個(gè)步驟就可以跳過(guò)了。
注意:Mac或Linux上有可能并存Python 3.x和Python 2.x误趴,因此對(duì)應(yīng)的pip命令是pip3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末霹琼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凉当,更是在濱河造成了極大的恐慌枣申,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纤怒,死亡現(xiàn)場(chǎng)離奇詭異糯而,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)泊窘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)熄驼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人烘豹,你說(shuō)我怎么就攤上這事瓜贾。” “怎么了携悯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵祭芦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我憔鬼,道長(zhǎng)龟劲,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任轴或,我火速辦了婚禮昌跌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘照雁。我一直安慰自己蚕愤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著萍诱,像睡著了一般悬嗓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上裕坊,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天包竹,我揣著相機(jī)與錄音,去河邊找鬼籍凝。 笑死映企,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的静浴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼挤渐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼苹享!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起浴麻,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤得问,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后软免,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體宫纬,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年膏萧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了漓骚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡榛泛,死狀恐怖蝌蹂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情曹锨,我是刑警寧澤孤个,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站沛简,受9級(jí)特大地震影響齐鲤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜椒楣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一给郊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧撒顿,春花似錦丑罪、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)跪另。三九已至,卻和暖如春煤搜,著一層夾襖步出監(jiān)牢的瞬間免绿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工擦盾, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嘲驾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓迹卢,卻偏偏與公主長(zhǎng)得像辽故,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子腐碱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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

  • 模塊簡(jiǎn)介 在軟件開(kāi)發(fā)過(guò)程中誊垢,隨著代碼的不斷增加,在一個(gè)問(wèn)價(jià)里代碼就會(huì)越來(lái)越長(zhǎng)症见,不容易維護(hù)喂走。為了編寫(xiě)可維護(hù)的代碼,我...
    齊天大圣李圣杰閱讀 798評(píng)論 0 0
  • http://python.jobbole.com/85231/ 關(guān)于專(zhuān)業(yè)技能寫(xiě)完項(xiàng)目接著寫(xiě)寫(xiě)一名3年工作經(jīng)驗(yàn)的J...
    燕京博士閱讀 7,577評(píng)論 1 118
  • python學(xué)習(xí)筆記 聲明:學(xué)習(xí)筆記主要是根據(jù)廖雪峰官方網(wǎng)站python學(xué)習(xí)學(xué)習(xí)的谋作,另外根據(jù)自己平時(shí)的積累進(jìn)行修正...
    renyangfar閱讀 3,044評(píng)論 0 10
  • 聽(tīng) 窗外微風(fēng)拂 我能感受春的氣息 聞 小院芳草香 我能感受自然的氣息 看 大地跳動(dòng)的生命 我能感受生命的旋律
    情若風(fēng)閱讀 137評(píng)論 1 1
  • 面對(duì)有錢(qián)的閨女,連媽都得說(shuō)軟話(huà)吭净。 1 《我的前半生》熱播中碘裕,大家都在討論著劇中表達(dá)的現(xiàn)實(shí)世界≡芮看到朋友圈有人發(fā)一張...
    生達(dá)成長(zhǎng)規(guī)劃閱讀 432評(píng)論 0 1