- 本教程為python3文檔解讀
- 本教程面向完全型小白偿曙,只要你會在電腦上打字督赤,那你就可以看懂陨晶。
- 參考視頻觀看对碌,味道更加:https://space.bilibili.com/186584185/#!/video
- 建議優(yōu)先閱讀本系列的《編程的本質》這一章節(jié)。
- 推薦閱讀:《跟我讀python3文檔:016_帶你手撕程序滥壕,展現(xiàn)一個函數(shù)如何從思路到實現(xiàn)》
作者:咖喱py
貫穿始終的理念:別廢話纸颜,就是干!
往期回顧:
- 匿名函數(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
參考截圖如下:
注:如果電腦里沒有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
可以參考下面的截圖:
解釋下調用代碼的意思。
- $是終端的輸入提示符泼返。
- python3是python解釋器
- fibo.py是我們寫好的腳本
- 50是函數(shù)用來調用的參數(shù)
7. 搜索路徑
有的同學硝逢,雖然按照我說的做了,但可能會發(fā)現(xiàn)自己的腳本并不能被成功運行绅喉。
一個常見的原因就是:你的腳本放錯了文件夾渠鸽。
還記得我們之前講解的環(huán)境變量嗎?
你的python解釋器會去指定路徑的文件夾尋找文件柴罐,但如果你放在了其他文件夾徽缚,你的pyton解釋器就會找不到你的腳本了。
所以革屠,我們一般會把腳本文件放在你的主目錄下凿试。
在終端中排宰,主目錄一般會以波浪號~表示。
我們可以通過在終端輸入:
pwd
來查看我們當前的工作目錄那婉。
我現(xiàn)在的工作目錄就是我的主目錄板甘,它的實際位置是:
/Users/Galipy
所以,我的腳本文件都會存儲在這個名為Galipy的文件夾里详炬。
那么虾啦,python解釋器都會搜索哪幾個文件夾呢?
我們可以通過sys模塊的path來查看
>>> import sys
>>> sys.path
我們會得到一個列表痕寓,列表里的元素值就是python解釋器會搜索的路徑了傲醉。
思考:既然我們的到的搜索路徑是一個列表,那么如何讓這個列表里添加其他路徑值呢呻率?
提示:append方法
以上就是你目前需要了解的關于模塊的知識點了硬毕。
我們總結一下,你可以著重記憶一下:
import 模塊
例如:import sysfrom 模塊 import 函數(shù)或變量
例如:from fibo import fib2__name__ == "__main__"
例如:
if __name__ == "__main__":
import sys
fib(int(sys.argv[1]))
好好背誦這三個知識點吧~