Python 自學第七天:Module 模組
文章推薦指數: 80 %
也就是使用其他.py 檔案中,預先定義好的變數和函式。
使用模組的好處就是,別人寫過或自己定義過的變數和函式可以直接拿來使用。
Python 有一些內建好 ...
0%
也就是使用其他.py檔案中,預先定義好的變數和函式。
使用模組的好處就是,別人寫過或自己定義過的變數和函式可以直接拿來使用。
Python有一些內建好的模組,可以直接拿來使用,如:與作業系統相關的os、與命令行相關的sys、與數學相關的math、random、statistics等,可以參考Python標準函式庫概覽。
也有其他人寫好的模組,可以從網路上下載來使用。
也可以自己定義模組。
模組的引入和使用
「全部」的變數和函式
引入
使用模組前要先告知Python主程式,即將引入哪些模組,引入方法如下:
12345#語法一:import模組名(as別名)#語法二:from模組名import*
*:表示該模組中所有的變數和函式。
別名:可以幫很長不好記憶的模組自訂名稱。
使用
123456模組名.變數名模組名.函式名()#如果有取「別名」則改成這樣別名.變數名別名.函式名()
「特定」的變數和函式
引入
但是每次將整個模組的變數和函式引入,會有造成程式運行效能降低的可能性。
因此,還可以針對模組中的特定變數和函式來引入:
12from模組名import變數名from模組名import函式名
使用
不需要在變數和函式前面加模組名.或別名.。
12變數名函式名()
因為簡化了呼叫變數和函式的方式,小心模組中的變數名、函式名和Python內建的變數名、函式名重疊。
Python內建的模組
以下列出一些常用的模組中的函式。
與作業系統相關的os模組
getcwd():回傳目前的工作目錄。
12345importosprint(os.getcwd())#Returnthecurrentworkingdirectory#輸出結果:#/Users/zhengzhurong/Desktop/Python_beginning
也可以寫成如下:
12fromosimportgetcwdprint(getcwd())
更多請參考:Python文件os模組
與命令行相關的sys模組
prefix:Python安裝位置路徑的前綴。
path:路徑List,用來搜尋模組所在位置。
path[0]是主程式所在的目錄。
其餘元素是Python內建模組的所在位置,為prefix/lib/python_version。
version:Python直譯器的版本號和其他訊息。
1234567891011121314151617fromsysimportprefix,path,versionprint(prefix)print(path)print(version)#/Library/Frameworks/Python.framework/Versions/3.8#['/Users/zhengzhurong/Desktop/Python_beginning','/Library/Frameworks/#Python.framework/Versions/3.8/lib/python38.zip','/Library/Frameworks/#Python.framework/Versions/3.8/lib/python3.8','/Library/Frameworks/#Python.framework/Versions/3.8/lib/python3.8/lib-dynload','/Users/#zhengzhurong/Library/Python/3.8/lib/python/site-packages','/Library/#Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages']#3.8.0(v3.8.0:fa919fdf25,Oct142019,10:23:27)#[Clang6.0(clang-600.0.57)]
更多請參考:Python文件sys模組
與基本運算相關的math模組
fabs(a):取絕對值。
log10(a):以10為底取對數。
1234567frommathimportfabs,log10print(fabs(-5.5))print(log10(1000))#5.5#3.0
更多請參考:Python文件math模組
與隨機選擇相關的random模組
choice(seq):從sequence資料中,隨機選取一個元素。
sequence是可以疊代的資料類型,有字串、List、Tuple等。
sample(seq,n):從sequence資料中,隨機選取n個元素。
回傳List資料。
12345678fromrandomimportchoice,sampledata=(2,5,11,4,7,33)print(choice(data))print(sample(data,2))#7#[4,2]
shuffle(list):將可變動的sequence資料(也就是List)中的元素,隨機調換位置。
如果想要調換不可變動的sequence資料中的元素,只能利用sample(seq,n=len(seq))回傳一個新的List。
1234567891011121314fromrandomimportsample,shuffledata=(2,5,11,4,7,33)my_list=[2,4,5,13,6,18]print(my_list)shuffle(my_list)print(my_list)#[2,4,5,13,6,18]#[6,2,18,5,13,4]print(sample(data,len(data)))#利用sample調換不可變動Tuple的元素#[11,33,7,5,4,2]
random():不需要傳入任何參數,隨機取得0.0~1.0(不包含)之間的浮點數N。
uniform(a,b):隨機取得介在a和b之間的浮點數N。
會不會包含b則以公式a+(b-a)*random()來決定。
1234567fromrandomimportrandom,uniformprint(random())print(uniform(1.2,5.5))#0.3670324625285356#3.0212954783263894
randint(a,b):隨機取得介在a和b(包含)之間的整數N。
randrange(a,b[,step]):隨機取得介在a和b(不包含)之間的整數N。
可以指定數字間隔。
1234567fromrandomimportrandint,randrangeprint(randint(1,3))print(randrange(1,10,3))#3#7
更多請參考:Python文件random模組
與統計相關的statistics模組
下列函式中,data要是sequence或可疊代的資料。
mean(data):計算data的平均數。
median(data):計算data的中位數。
mode(data):取出現最多次的元素。
stdev(data):計算data的樣本標準差。
12345678910111213fromstatisticsimportmean,median,mode,stdevnums=(2,5,7,10,13,99)print(mean(nums))print(median(nums))colors=["red","blue","blue","red","green","red","red"]print(mode(colors))print(stdev(nums))#22.666666666666668#8.5#red#37.59077901117063
更多請參考:Python文件statistics模組
自定義模組
定義模組很簡單,就是直接建立一個.py檔案,裡面放置自訂的變數或函式即可。
12345678#../my_math.pygrade="A-"defpractice(thing="arithmetic"):print("Practice"+thing)defdoExercises(topic="Trigonometricfunctions"):print("Doexerciseson"+topic)
依照主程式和模組放置位置,需要執行不同的動作才能引入:
「同層」目錄結構
123Python_beginning├main.py└my_math.py
不需要格外的動作,可以直接在主程式main.py中引入。
1234567#../main.pyimportmy_mathprint("Mathgrade:"+my_math.grade)my_math.practice()#Mathgrade:A-#Practicearithmetic
因為如上述提過的Python內建sys模組中的path變數:路徑List,用來搜尋模組所在位置。
path[0]是主程式main.py所在的資料夾,也就是../Python_beginning。
因此可以直接找到my_math模組。
模組在「資料夾」中,屬於下一層
1234Python_beginning├main.py└subject└my_math.py
當我直接引入my_math.py模組,會報錯:
123456789importmy_mathprint("Mathgrade:"+my_math.grade)my_math.practice()#Traceback(mostrecentcalllast):#File"../Python_beginning/main.py",line1,in
需要在importmy_math之前,自己增加路徑位置,動作如下:
123importsyssys.path.append("./subject")#sys.path.append("subject")#這樣寫也可以
append():在可變動List資料尾端,新增一個元素。
使用他人建置的模組
pip是Python的模組package管理工具,提供了對模組package的查詢、下載、安裝和卸載的功能。
如果你的Python是從官網上面下載,就包含了pip工具。
如果尚未安裝pip工具,請參考下方。
安裝pip
在pip官網中,可以看到安裝的方法。
獲得安裝pip的檔案。
可以使用終端機cd進入某個資料夾,用下方指令碼下載;或是去這裏將整個頁面存在一個.py的檔案中。
1$curlhttps://bootstrap.pypa.io/get-pip.py-oget-pip.py#先下載安裝pip的檔案
curl:抓取網頁到一個檔案中。
-o:必須輸入檔案名,將網頁內容下載到該檔案中。
因為pip會自動被安裝在/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages路徑中,因此get-pip.py檔案儲存在哪裡都無所謂。
使用終端機cd進入get-pip.py所在資料夾,執行安裝pip的檔案。
1$sudopython3get-pip.py#執行安裝pip的檔案
使用pip安裝模組
有了pip工具後,使用它安裝他人建置的模組。
1$pipinstall模組名
參考資料:
彭彭的課程:PythonModule模組的載入與使用
延伸文章資訊
- 1Python 101 基礎教學(9) - 模組module 與套件package
寫程式從來就是站在巨人的肩膀上。Python 提供了許多的內建模組便利我們加速開發,事半功倍。除此之外你可以用第三方的函式庫,你也可以自己造輪子, ...
- 2模組與import陳述式· Introducing python - iampennywu
用多個檔案來建立並使用Python 程式; 所謂的模組(module),只是一個Python 程式檔 ... 直接從「random 模組(Python 內建標準模組庫)」匯入「choice() ...
- 3Python常用的內建模組 - 程式人生
引用其他模組,包含python內建模組和其他第三方模組; 避免函式名和變數名等名稱衝突。 模組的匯入方式. import. 直接使用import語句匯入標準 ...
- 410. Python 標準函式庫概覽— Python 3.10.6 說明文件
務必使用 import os 而非 from os import * 。這將避免因系統不同而有實作差異的 os.open() 覆蓋內建函式 open() 。 在使用 os 諸如此類大型模組時搭配...
- 5解析Python模組(Module)和套件(Package)的概念
四、dir()函式(dir function). Python提供了一個內建函式dir(),用來顯示物件(Object)的 ...