15.模塊-包-庫
15.1 基本概念
? ? 隨著代碼量的不斷增多,一個檔案里代碼會越來越長,也不容易維護,為了解決這種問題,我們會進行拆分,并將具備類似的功能放同一檔案中,這樣每個檔案包含的代碼就相對較少,在Python中一個.py檔案就稱之為一個模塊,英文叫(module)
? ? 使用模塊的好處如下所示:
- 1.提高了代碼的可維護性
- 2.提高了代碼的可復用性,當一個模塊撰寫完成之后,可以被其他地方參考,
- 3.使用模塊還可以避免函式名稱、變數名和類名等命名沖突,相同名字的函式、變數名、類名等可以放在不同的模塊中,但要避免與內置函式名沖突
? ? 模塊雖然解決了函式名、變數名和類名等命名沖突,那模塊之前也會存在命名沖突的情況,應該怎么解決?為解決這個模塊命名沖突,Python引入了按目錄來組織模塊的方法,稱為包,英文(package)
? ? 舉個例子,現在有兩個py檔案,分別為surpassA.py和surpassB.py,則相應的模塊名即為surpassA和surpassB,如果這兩個模塊名與其他模塊名存在沖突,則可以包來組織模塊,使其成為包,方法是選擇一個頂層包名,如surpass,按以下形式進行存放
surpass
|—— __init__.py
|—— surpassA.py
|—— surpassB.py
? ? 在引入包之后,只要頂層的包名沒有沖突,則可以確保模塊名不會產生沖突,則相應的模塊名也由原來的模塊名變更為surpass.surpassA和surpass.surpassB,
1.包的注意事項:每個包目錄中必須存在__init__.py檔案,否則Python會將視為普通目錄,而非一個包,
2.__init__.py檔案內容可以為空,也可以有相應的代碼,其本身也是一個模塊
? ? 類似這種情況,在一個包里面也是可以存在多個目錄,組成多層級的包,示例如下所示:
surpass
|—— __init__.py
|—— surpassA.py
|—— surpassB.py
|—— config
| |—— __init__.py
| |—— surpassC.py
| |—— surpassD.py
|—— web
|—— __init__.py
|—— surpassE.py
|—— surpassF.py
? ? 以示例對應的模塊名分別如下所示:
- surpassC:surpass.config.surpassC
- surpassA:surpass.surpassA
? ? 在Python中庫是具有相關功能模塊的集合,英文(library),可分為以下三種形式:
- 標準庫:Python內置庫
- 自定義庫:自己所寫
- 第三方庫:由他人所寫或開源分享出來的
? ? 第三方庫的安裝,一般使用pip安裝,其形式如下所示:
pip/pip3 install -U 庫名
15.2 匯入模塊
? ? Python自身內置了很多模塊,只要安裝完成后,即可以正常呼叫,匯入模塊的常見形式如下所示:
import 模塊名
import 模塊名 as 別名 # 在模塊名稱特別長的時候,可以簡化呼叫所輸入的模塊名
import 模塊名A,模塊名B,模塊名C,
from 模塊名 import 函式名/類名 # 匯入指定模塊中的函式或類
from 模塊名 import * # 匯入指定模塊中的所有內容,但排除以下劃線開頭的變數、函式等
? ? 引入某一特定路徑下的模塊,可使用sys.path.append(模塊名),示例如下所示:
import sys
# 表示將上一層路徑添加到sys.path中,在添加之后,解釋器會搜索當前模塊所在目錄以及sys.path指定的路徑去找需要import的模塊
sys.path.append("..")
? ? 匯入模塊需要遵循的規則如下所示:
- 1.內置的模塊優先匯入并靠前
- 2.匯入模塊時,盡量少用from from 模塊名 import *
- 3.不要重復匯入同一模塊,Python針對多次匯入的模塊,也僅執行一次
15.3 示例代碼
person.py
class Person:
def __init__(self,name,age):
self._name=name
self._age=age
def getPerInfo(self):
print(f"name is {self._name},age is {self._age}")
mulClass.py
class Student:
def __init__(self, name, age,classNo):
self._name = name
self._age = age
self._classNo=classNo
def getPerInfo(self):
print(f"name is {self._name},age is {self._age},class NO. is {self._classNo}")
class Worker:
def __init__(self,name,occupation):
self._name=name
self._occupation=occupation
def getWorkerInfo(self):
print(f"name is {self._name},he/she is {self._occupation}")
class Teacher():
def __init__(self,name,classNO):
self._name=name
self._classNo=classNO
def getClassNo(self):
print(f"teacher's name is {self._name},His/Her's class is {self._classNo}")
def testFunc(name):
print(f"Hello, {name}")
main.py
import person
from mulClass import Student
from mulClass import testFunc
if __name__ == '__main__':
person=person.Person("Surpass",28)
person.getPersonInfo()
student=Student("Surpass",18,"Class-1")
student.getStudentInfo()
testFunc("testFunc")
輸出結果如下所示:
name is Surpass,age is 28
name is Surpass,age is 18,class NO. is Class-1
Hello, testFunc
本文地址:https://www.cnblogs.com/surpassme/p/13020585.html
本文同步在微信訂閱號上發布,如各位小伙伴們喜歡我的文章,也可以關注我的微信訂閱號:woaitest,或掃描下面的二維碼添加關注:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/141169.html
標籤:Python
上一篇:Python基礎-14例外處理
下一篇:監督學習與sklearn庫
