跟我讀python3文檔:025_模塊(6. Modules)

貫穿始終的理念:別廢話纸颜,就是干!


往期回顧

  • 匿名函數(shù)lambda
  • 列表的方法
  • del關鍵字
  • 列表推導式
  • 數(shù)據(jù)結構

文檔解讀

python3文檔第六小節(jié)鏈接地址:6. Modules

本章主要講解6. Modules(模塊)這個小節(jié)


模塊入門知識點相對較少绎橘,只要理解了基本概念胁孙,很快就能上手。
如果長篇大論看不下去的称鳞,可以直接翻到最后看總結涮较。從而快速了解模塊章節(jié)的知識點。

1. 首先要理解模塊是什么冈止。
我們到目前為止狂票,都是在交互模式里輸入代碼,通過python解釋器執(zhí)行代碼熙暴。
不知道大家有沒有感覺到苫亦,這是一個非常笨拙的寫代碼的方法。

當我們要輸入的代碼比較多時怨咪,就會遇到一個問題:修改麻煩屋剑!
或者說,是不能修改诗眨。
我們一旦輸入錯誤唉匾,那么之前的代碼就廢掉了,只能重新輸入。

目前我們一次輸入的代碼量還比較少巍膘,最多也就十來行厂财。重新輸入一次到還可以接受。但是以后峡懈,我們的代碼量越來越龐大璃饱,比如一次要輸入上百行,那么肪康,如果你中間有寫錯的部分荚恶,再把這些從頭來過可能就很麻煩了。(ps:上古程序員被這件事折磨了很久磷支。谒撼。)而且,你不能保證雾狈,下一次就不會犯錯了廓潜。

為了解決這樣的問題,我們一般是提前把代碼寫在一個文本文件里善榛,然后用python解釋器去解釋執(zhí)行辩蛋。如果有錯誤的地方,只要修改下文本內容就可以了移盆。

而這個提前寫好的文本文件悼院,就是我們說的模塊

不過味滞,一般我們會把官方自帶的模塊成為內置模塊樱蛤。
自己寫的文件一般就叫做腳本文件钮呀。剑鞍。
但其實他倆在本質上是一樣的。

所以爽醋,你可以理解為:模塊即腳本蚁署,腳本即模塊

關鍵得看是誰寫的蚂四。光戈。。


2. 模塊的特征
模塊都是以.py結尾的文本文件遂赠。
比如 gali.py久妆,知道galipy名字的由來了吧~
比如 sys.py、math.py跷睦、rhinoscriptsyntax.py
這些模塊筷弦,有的是官方自帶的,有的是別人寫的,也有的是自己寫的烂琴。不一而足爹殊。


3. 編寫腳本
隨便打開一個文本編輯器,開始寫代碼就行了奸绷。但是要記住梗夸,名字要以.py結尾。
下面号醉,我們以atom編輯器反症,展示腳本編寫。
在命令行直接用atom創(chuàng)建fibo.py文件扣癣。

atom fibo.py

參考截圖如下:

創(chuàng)建腳本.png

注:如果電腦里沒有atom編輯器惰帽,可以通過homebrew安裝。
執(zhí)行如下代碼安裝

brew cask install atom

如果不知道homebrew是是什么父虑,請閱讀如下章節(jié)
跟我讀python3文檔:004_mac與python3配置


執(zhí)行完atom fibo.py之后该酗,會打開一個新頁面,我們在里面輸入如下代碼:

# Fibonacci numbers module

def fib(n):    # write Fibonacci series up to n
    a, b = 0, 1
    while b < n:
        print(b, end=' ')
        a, b = b, a+b
    print()

def fib2(n):   # return Fibonacci series up to n
    result = []
    a, b = 0, 1
    while b < n:
        result.append(b)
        a, b = b, a+b
    return result

保存士嚎,關閉呜魄。
這樣我們的第一個腳本就編寫完了。
該腳本用來生成指定范圍的斐波那契數(shù)列莱衩。


4. 調用模塊(1)
使用import關鍵字就可以調用模塊了爵嗅。
打開pyhon交互模式,
然后試試調用自己編寫的模塊笨蚁,也就是我們上面的那個fibo.py腳本文件

>>> import fibo                 #.py被省略睹晒。
>>> fibo.fib(100)               #fibo是腳本名,fib是腳本內的函數(shù)名括细。
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

fibo.fib(100)這句的意思是伪很,調用fibo腳本內部的fib函數(shù),參數(shù)是100 奋单。
腳本名與函數(shù)名用連接锉试。

問:為什么調用模塊內的函數(shù)要這么麻煩呢?

答:因為我們以后寫程序會導入很多模塊览濒,經(jīng)常會碰到函數(shù)重名的問題呆盖。
為了解決這個問題,只好在函數(shù)名前指明是哪個模塊的函數(shù)贷笛。
以后应又,你可能還會遇到模塊也重名的情況。乏苦。株扛。到時還會通過相似方法,指明這個模塊是放在哪個文件夾的。
而這種以文件夾分類的方法就叫做包(Packages)
一個包里可以有多個模塊席里。
相當于:一個文件夾里有多個以.py結尾的文本文件叔磷。
理解了嗎?
而為了區(qū)分哪些文件夾是包奖磁,哪些不是改基,于是規(guī)定,文件夾里有名為:__init__.py的文件就是包咖为。該文件可以是空文件秕狰,內部什么都可以不寫。


5. 調用模塊(2)
雖然我們借用其他模塊的函數(shù)一般都是以如下形式
模塊名.函數(shù)( )的形式躁染,但是鸣哀,有時模塊名過長,并且該模塊下的特定函數(shù)調用頻繁吞彤。每次寫起來都很麻煩我衬。
為了解決這樣的問題,在保證函數(shù)沒有重名的情況下饰恕,可以用如下方法挠羔,只導入特定模塊的特定函數(shù)。
以我們自己寫的模塊舉例,從fibo模塊導入fib( )和fib2( )兩個函數(shù)埋嵌,并調用破加。

>>> from fibo import fib, fib2
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
>>> fib2(50)
[1, 1, 2, 3, 5, 8, 13, 21, 34]

6. 運行腳本
有時我們會需要在終端(shell)中直接運行我們的腳本。
我們需要怎么做呢雹嗦?

我們先來了解兩個知識點
知識點1
每個模塊范舀,都有一個名為:__name__的內置變量,它存儲了模塊的名字了罪。

>>> import fibo
>>> fibo.__name__
'fibo'

我們自己寫的模塊也會有這個變量锭环。
但是,當我們直接在終端(shell)中運行而不是在python交互環(huán)境中捶惜。這個變量存儲的值就會變?yōu)椋?__main__"
知識點2
sys模塊的argv變量
詳情參見http://www.reibang.com/p/4269882480aa

如果你掌握了上面兩個知識點田藐,那么繼續(xù)跟我往下看荔烧。
當我們在終端運行我們的腳本時吱七,python解釋器會執(zhí)行我們寫好的腳本,但我們什么信息也得不到鹤竭。為什么呢踊餐?因為我們沒有明確的函數(shù)調用。也就是說臀稚,我們只告訴了計算機吝岭,你都可以做什么。但是我們沒有讓他做。
這就好比你啟動了計算器窜管,雖然計算器可以運行加散劫、減、乘幕帆、除获搏,但它什么也不會做。因為我們沒有明確告訴計算器做什么失乾。

所以常熙,我們要額外添加明確的指令。

if __name__ == "__main__":
    import sys
    fib(int(sys.argv[1]))

結合上面的兩個知識點碱茁,你看明白這段代碼嗎裸卫?

如果__name__變量的值為 "__main__",則執(zhí)行之后的操作纽竣。
導入sys模塊墓贿,取得終端輸入的參數(shù),轉化為int型蜓氨,并將其作為參數(shù)募壕,被fib( )函數(shù)調用。

那么语盈,什么時候__name__變量的值為 "__main__"呢舱馅?
就是我們在知識點1中講到的,當我們在終端直接調用腳本時刀荒。

所以代嗤,把上面的代碼添加進我們自己寫的腳本結尾,保存缠借。
然后試著在終端調用它吧干毅。

$ python3 fibo.py 50
1 1 2 3 5 8 13 21 34

可以參考下面的截圖:

調用fibo.py腳本.png

解釋下調用代碼的意思。

  • $是終端的輸入提示符泼返。
  • python3是python解釋器
  • fibo.py是我們寫好的腳本
  • 50是函數(shù)用來調用的參數(shù)

7. 搜索路徑
有的同學硝逢,雖然按照我說的做了,但可能會發(fā)現(xiàn)自己的腳本并不能被成功運行绅喉。
一個常見的原因就是:你的腳本放錯了文件夾渠鸽。

還記得我們之前講解的環(huán)境變量嗎?
你的python解釋器會去指定路徑的文件夾尋找文件柴罐,但如果你放在了其他文件夾徽缚,你的pyton解釋器就會找不到你的腳本了。
所以革屠,我們一般會把腳本文件放在你的主目錄下凿试。
在終端中排宰,主目錄一般會以波浪號表示。
我們可以通過在終端輸入:

pwd

來查看我們當前的工作目錄那婉。

工作目錄.png

我現(xiàn)在的工作目錄就是我的主目錄板甘,它的實際位置是:
/Users/Galipy

所以,我的腳本文件都會存儲在這個名為Galipy的文件夾里详炬。

那么虾啦,python解釋器都會搜索哪幾個文件夾呢?
我們可以通過sys模塊的path來查看

>>> import sys
>>> sys.path

我們會得到一個列表痕寓,列表里的元素值就是python解釋器會搜索的路徑了傲醉。

思考:既然我們的到的搜索路徑是一個列表,那么如何讓這個列表里添加其他路徑值呢呻率?
提示:append方法


以上就是你目前需要了解的關于模塊的知識點了硬毕。

我們總結一下,你可以著重記憶一下:

  1. import 模塊
    例如:import sys

  2. from 模塊 import 函數(shù)或變量
    例如:from fibo import fib2

  3. __name__ == "__main__"
    例如:

if __name__ == "__main__":
    import sys
    fib(int(sys.argv[1]))

好好背誦這三個知識點吧~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末礼仗,一起剝皮案震驚了整個濱河市吐咳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌元践,老刑警劉巖韭脊,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異单旁,居然都是意外死亡沪羔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門象浑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔫饰,“玉大人,你說我怎么就攤上這事愉豺÷ㄓ酰” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵蚪拦,是天一觀的道長杖剪。 經(jīng)常有香客問我,道長驰贷,這世上最難降的妖魔是什么盛嘿? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮饱苟,結果婚禮上孩擂,老公的妹妹穿的比我還像新娘狼渊。我一直安慰自己箱熬,他們只是感情好类垦,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著城须,像睡著了一般蚤认。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上糕伐,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天砰琢,我揣著相機與錄音,去河邊找鬼良瞧。 笑死陪汽,一個胖子當著我的面吹牛,可吹牛的內容都是我干的褥蚯。 我是一名探鬼主播挚冤,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赞庶!你這毒婦竟也來了训挡?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤歧强,失蹤者是張志新(化名)和其女友劉穎澜薄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摊册,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡肤京,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了茅特。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蟆沫。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖温治,靈堂內的尸體忽然破棺而出饭庞,到底是詐尸還是另有隱情,我是刑警寧澤熬荆,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布舟山,位于F島的核電站,受9級特大地震影響卤恳,放射性物質發(fā)生泄漏累盗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一突琳、第九天 我趴在偏房一處隱蔽的房頂上張望若债。 院中可真熱鬧,春花似錦拆融、人聲如沸蠢琳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽傲须。三九已至蓝牲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泰讽,已是汗流浹背例衍。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留已卸,地道東北人佛玄。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像累澡,于是被迫代替她去往敵國和親翎嫡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,522評論 25 707
  • 一永乌、溫故而知新 1. 內存不夠怎么辦 內存簡單分配策略的問題地址空間不隔離內存使用效率低程序運行的地址不確定 關于...
    SeanCST閱讀 7,779評論 0 27
  • 用 python 解釋器來編程從 Python 解釋器退出再進入惑申,那么你定義的所有的方法和變量就都消失了。 為此...
    chen_000閱讀 520評論 0 3
  • http://python.jobbole.com/85231/ 關于專業(yè)技能寫完項目接著寫寫一名3年工作經(jīng)驗的J...
    燕京博士閱讀 7,548評論 1 118
  • 聽起來是不是像“我們買了個動物園”的續(xù)集翅雏?老朋友博士畢業(yè)圈驼,慶祝派對就舉辦在他們夫妻剛剛買下的一座學校校舍。校舍位于...
    Redfever閱讀 512評論 0 6