不間斷 Python 挑戰 Day 21 - 模組(module)

閱讀時間約 9 分鐘
大型程式的開發通常不會由一個人獨力完成,而是將程式依功能拆分成不同的函數或是類別,由不同人協力開發成各個模組,最後再將這些模組導入主程式,或是直接套用現有的模組。模組依來源可以分成三大類:
  • Python內建的模組
  • 外部模組,需從第三方的軟體儲存庫(如PyPI)安裝使用
  • 程式開發者自行開發的模組

Python內建的模組

我們之前一再使用的random模組就是屬於此類模組,這類的模組在安裝Python時就已經預先安裝,因此使用時不需再額外安裝,也稱為Python的標準程式庫(standard library)。其它的模組可在以下Python官方的文件中找到:https://docs.python.org/3/library/

導入整個模組

如同之前介紹random模組時使用的方式,其導入的方式如下:
import 模組
調用模組的函數或類別的方法如下:
模組.函數名稱
模組.類別名稱
例如以下範例使用random模組中的方法,產生0到9之間的隨機整數。
import random
print(random.randint(0, 9))
print(random.randrange(0, 10))

導入模組內的特定函數或類別

除了導入整個模組以外,也可以只導入模組內的特定幾個函數,導入的方式如下:
from 模組 import 函數名稱1, 函數名稱2, ...
from 模組 import 類別名稱1, 類別名稱2, ...
承續上個例子,導入特定的函數後,使用時便可以省略模組名稱。
from random import randint, randrange
print(randint(0, 10))
print(randrange(0, 10))

導入模組內的所有函數或類別

導入模組內所有函數或類別的方式如下:
from 模組 import *
和上個例子相同,導入所有函數後,使用時可以省略模組名稱。
from random import *
print(randint(0, 10))
print(randrange(0, 10))

自訂模組名稱

若覺得原本的模組名稱太長、不好記憶,可以將模組名稱定義為其它的識別字,方法如下:
import 模組 as 識別字
例如以下例子,rand被用來取代random,做為呼叫random模組方法的識別字。
import random as rand
print(rand.randint(0, 9))
print(rand.randrange(0, 10))
也可以單獨更改模組內特定函數或類別的名稱:
from 模組 import 函數名稱 as 識別字
from 模組 import 類別名稱 as 識別字
例如:
from random import randint as rint
print(rint(0, 9))

外部模組

外部模組因不包含在Python的標準程式庫中,因此使用前必須先安裝,安裝完成後,導入的方法和導入Python內建模組完全相同。

安裝外部模組

假設我們需要導入一個matplotlib外部模組,在PyPI可以找到matplotlib的相關用法:https://pypi.org/project/matplotlib/
在PyCharm中,安裝一個外部模組的方法如下:
  1. 點選File。
  2. 點選Settings...。
3. 點選當下編輯的Project名稱,例如我的名稱是marathon_python。
4. 點選Python Interpreter。
5. 點選+號新增模組。
6. 在搜尋的欄位輸入欲安裝的模組名稱,如這裡我輸入matplotlib。
7. 點選Install Package。
8. matplotlib旁顯示安裝中的訊息。
9. 安裝完成後,下方顯示Package 'matplotlib' installed successfully,可將此頁面關閉。
10. 在右方的Package欄位中,可以看到新增了許多相關的套件。

使用外部模組

至此,matplotlib模組就已經安裝完成,我們便可以導入此模組來使用其所提供的功能。
import matplotlib.pyplot
line = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
matplotlib.pyplot.plot(line)
matplotlib.pyplot.show()
執行結果:

自行開發的模組

Python也允許將自行建立的函數或類別儲存在獨立的文件中,再以模組的方式載入主程式。我們以Day20所開發的程式為例,將所有的程式碼儲存在marathon_python_day20.py的文件中,在今天的主程式中導入。
import marathon_python_day20
執行後發現程式已經自動執行了marathon_python_day20.py中主程式的內容,但通常載入模組希望的是能夠獨立引用模組內的方法或類別,而非做為主程式來執行。因此,我們可以使用以下語法,將模組內的主程式部分放入if區塊中,如此一來,當該檔案做為模組導入時,便不會執行if區塊的內容,此時變數__name__的內容為模組的名稱marathon_python_day20。
# marathon_python_day20.py
if __name__ == "__main__":
  # create a test pool
  test_pool = []
  for fact in fact_data:
    fact_obj = CreateTestPool(fact["question"], fact["answer"])
    test_pool.append(fact_obj)
  # do fact test
  fact_test = TestGenerator(test_pool)
  while fact_test.is_last_questions():
    fact_test.generate_next_question()
  # comments
  print(f"你的總分: {fact_test.score}/{fact_test.question_number}.")
  if fact_test.get_score() > 4:
    print("恭喜你答得比黑猩猩好!")
  elif fact_test.get_score() == 4:
    print("黑猩猩4ni?")
  else:
    print("趕快買本書來看吧!")
在今天的主程式中,我們就可以將marathon_python_day20.py中的資料與類別做為模組導入使用,
# marathon_python_day21.py
from marathon_python_day20 import fact_data, TestGenerator, CreateTestPool
# create a test pool
test_pool = []
for fact in fact_data:
  fact_obj = CreateTestPool(fact["question"], fact["answer"])
  test_pool.append(fact_obj)
# do fact test
fact_test = TestGenerator(test_pool)
while fact_test.is_last_questions():
  fact_test.generate_next_question()
# comments
print(f"你的總分: {fact_test.score}/{fact_test.question_number}.")
if fact_test.get_score() > 4:
  print("恭喜你答得比黑猩猩好!")
elif fact_test.get_score() == 4:
  print("黑猩猩4ni?")
else:
  print("趕快買本書來看吧!")

程式範例

為什麼會看到廣告
avatar-img
47會員
36內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Wei-Jie Weng的沙龍 的其他內容
全球公衛教授和公共教育家漢斯.羅斯林(Hans Rosling)在其著名的暢銷書「真確」中,提出了13個關於全球貧富、人口、出生/死亡率、教育、公衛等的「留意認知落差測驗」,回答的人不乏受過良好教育的專業人士,結果顯示,受測者在前12題平均只答對2題,遠不如隨機亂選的黑猩猩(如果黑猩猩會回答問題的話
到目前為止,我們所學習的都是程序性的程式設計(procedural programming),也就是程式碼是透過一連串的指令組成的程序或函數,由上而下依序執行不同的程序或是呼叫函數來完成程式的功能。 Python其實是一種物件導向的程式(object oriented programming, 簡稱
Python提供集合做為其資料結構,它就如同高中數學所學集合的概念,集合的內容一般來說是具有某種特性的事物的整體,例如考試分數及格的群體、數字1到100內的所有奇數、球箱內所有球的顏色等。因此,在一個集合中,每個元素的地位都是相同且無序,並且只能出現一次,集合和集合之間,也可以進行交集、聯集、差集等
Python依據變數有效的範圍可以區分為全域變數(Global variable)或區域變數(Local variable)。在函數內宣告的變數為區域變數,有效範圍只有在函數內,函數外部無法引用這個變數;在函數以外宣告的變數為全域變數,它的有效範圍為整個檔案,並且在函數內部也可以引用這個變數。
這篇文章將利用之前所學過的一些東西,包括if敘述、串列、while迴圈、函數等等的觀念,來實作一個撲克牌的小遊戲-21點。
在前面的文章中我們學習了關於字典的基本用法,今天再討論更多關於字典的其它用法,以及它和串列、元組等的關聯。
全球公衛教授和公共教育家漢斯.羅斯林(Hans Rosling)在其著名的暢銷書「真確」中,提出了13個關於全球貧富、人口、出生/死亡率、教育、公衛等的「留意認知落差測驗」,回答的人不乏受過良好教育的專業人士,結果顯示,受測者在前12題平均只答對2題,遠不如隨機亂選的黑猩猩(如果黑猩猩會回答問題的話
到目前為止,我們所學習的都是程序性的程式設計(procedural programming),也就是程式碼是透過一連串的指令組成的程序或函數,由上而下依序執行不同的程序或是呼叫函數來完成程式的功能。 Python其實是一種物件導向的程式(object oriented programming, 簡稱
Python提供集合做為其資料結構,它就如同高中數學所學集合的概念,集合的內容一般來說是具有某種特性的事物的整體,例如考試分數及格的群體、數字1到100內的所有奇數、球箱內所有球的顏色等。因此,在一個集合中,每個元素的地位都是相同且無序,並且只能出現一次,集合和集合之間,也可以進行交集、聯集、差集等
Python依據變數有效的範圍可以區分為全域變數(Global variable)或區域變數(Local variable)。在函數內宣告的變數為區域變數,有效範圍只有在函數內,函數外部無法引用這個變數;在函數以外宣告的變數為全域變數,它的有效範圍為整個檔案,並且在函數內部也可以引用這個變數。
這篇文章將利用之前所學過的一些東西,包括if敘述、串列、while迴圈、函數等等的觀念,來實作一個撲克牌的小遊戲-21點。
在前面的文章中我們學習了關於字典的基本用法,今天再討論更多關於字典的其它用法,以及它和串列、元組等的關聯。
你可能也想看
Google News 追蹤
Python 模組和套件系統讓我們的程式可以變得更高效且具備更多功能。本篇文章將深入介紹 Python 的模組,包括模組的匯入與使用、Python 的內建模組,以及如何透過 pip 安裝第三方套件,讓您的開發流程更加便利。
Thumbnail
從範例學python的目標讀者: 針對剛進入的初學者,想學習Python語言。 有基礎本數學邏輯基礎即可。 從小遊戲學python的目標讀者: 針對已經有經驗的C/C++, Python, 或其他有程式基礎的讀者。 想實作一些小專案,從實做中學習如何分析需求、元件分拆、到底層實作
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
NumPy(Numeric Python)是Python中用於科學計算的核心庫之一。它提供了高性能的多維陣列對象(即ndarray)以及用於處理這些陣列的各種函數和工具。 在NumPy中,有幾個常用的指令可以用來創建陣列
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
情況描述 我們在「【🔒 Python 先修班】教你親手打包專屬套件庫的手作課(pip install…)」有提到如何打包Python讓自己的程式變成套件, 讓其他人可以用pip install的方式進行安裝,😲 But… 我們實際上打包後, 發現到引用的檔案都有被打包進去,但目錄卻未被打包
想要開始Python語言的開發環境,有兩種常見方式,一種是下載安裝到本機端,另一種是直接在雲端執行。本文將介紹三個常見的開發工具及其安裝步驟。
Thumbnail
Python 提供了一個功能豐富的標準函式庫,其中 random 專門用於生成隨機數。本文將介紹 random 的基本介紹,以及函式應用。
Thumbnail
本文讓我們來淺談一下類別是什麼? 若想看詳細一點的python官方教學可點此連結 Python 的類別(Class)是一種面向物件導向程式設計的概念,讓你能夠創建具有屬性和方法的物件。類別是對現實世界中事物的抽象,它包含數據和操作這些數據的方法。它非常的抽象,想像一個類別就像是一個蛋糕模具,
Python 模組和套件系統讓我們的程式可以變得更高效且具備更多功能。本篇文章將深入介紹 Python 的模組,包括模組的匯入與使用、Python 的內建模組,以及如何透過 pip 安裝第三方套件,讓您的開發流程更加便利。
Thumbnail
從範例學python的目標讀者: 針對剛進入的初學者,想學習Python語言。 有基礎本數學邏輯基礎即可。 從小遊戲學python的目標讀者: 針對已經有經驗的C/C++, Python, 或其他有程式基礎的讀者。 想實作一些小專案,從實做中學習如何分析需求、元件分拆、到底層實作
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
NumPy(Numeric Python)是Python中用於科學計算的核心庫之一。它提供了高性能的多維陣列對象(即ndarray)以及用於處理這些陣列的各種函數和工具。 在NumPy中,有幾個常用的指令可以用來創建陣列
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
情況描述 我們在「【🔒 Python 先修班】教你親手打包專屬套件庫的手作課(pip install…)」有提到如何打包Python讓自己的程式變成套件, 讓其他人可以用pip install的方式進行安裝,😲 But… 我們實際上打包後, 發現到引用的檔案都有被打包進去,但目錄卻未被打包
想要開始Python語言的開發環境,有兩種常見方式,一種是下載安裝到本機端,另一種是直接在雲端執行。本文將介紹三個常見的開發工具及其安裝步驟。
Thumbnail
Python 提供了一個功能豐富的標準函式庫,其中 random 專門用於生成隨機數。本文將介紹 random 的基本介紹,以及函式應用。
Thumbnail
本文讓我們來淺談一下類別是什麼? 若想看詳細一點的python官方教學可點此連結 Python 的類別(Class)是一種面向物件導向程式設計的概念,讓你能夠創建具有屬性和方法的物件。類別是對現實世界中事物的抽象,它包含數據和操作這些數據的方法。它非常的抽象,想像一個類別就像是一個蛋糕模具,