概述
????????在上一節(jié),我們介紹了Python的異常處理,包括:異常、異常處理、拋出異常、用戶自定義異常等內(nèi)容。在這一節(jié)中,我們將介紹Python的模塊和包。Python的模塊(Module)和包(Package)是Python的兩個(gè)主要概念,它們都是用來組織和封裝代碼的機(jī)制。
什么是模塊
????????模塊實(shí)際上就是一個(gè)Python文件,它包含了Python對(duì)象定義和Python語句。文件名是模塊名加上“.py”后綴,比如:如果一個(gè)文件名為my_module.py,那么它就被稱為my_module模塊。模塊讓你能夠有邏輯地組織你的Python代碼段,把相關(guān)的代碼分配到一個(gè)模塊里能讓你的代碼更好用、更易懂。模塊能定義函數(shù)、類和變量,模塊里也能包含可執(zhí)行的代碼。模塊可以被別的程序引入,以使用該模塊中的函數(shù)、類等功能。
????????Python中的模塊可以分為兩種:內(nèi)置模塊和第三方模塊。內(nèi)置模塊是Python自帶的模塊,比如:datetime(日期和時(shí)間處理)、math(數(shù)學(xué)運(yùn)算)、random(隨機(jī)數(shù)生成)等。第三方模塊則是由Python社區(qū)或開發(fā)者開發(fā)的模塊,在Python的官方網(wǎng)站上可以找到。
????????使用模塊的好處有很多,主要包括:提高代碼復(fù)用性、代碼組織結(jié)構(gòu)更加清晰、降低程序耦合性、提高程序的安全性等。
導(dǎo)入模塊
????????在Python中,可以使用import語句來導(dǎo)入模塊,這使得你可以使用其他模塊中定義的函數(shù)、類和變量。導(dǎo)入模塊時(shí),Python會(huì)執(zhí)行該模塊中的所有頂層代碼。如果模塊本身又導(dǎo)入其他模塊,那么這些導(dǎo)入的模塊也會(huì)一并被執(zhí)行。
# 導(dǎo)入os模塊
import os
# 導(dǎo)入math模塊
import math
# 使用os模塊中的變量
print(os.curdir)
# 使用math模塊中的函數(shù)
print(math.pow(2, 4))
????????在上面的示例代碼中,os和math都是Python提供的標(biāo)準(zhǔn)庫模塊。os模塊提供了與操作系統(tǒng)交互的函數(shù),math模塊則提供了許多與數(shù)學(xué)計(jì)算相關(guān)的函數(shù)。
????????如果你只想導(dǎo)入模塊中的特定函數(shù)和變量,可以使用from import的語法。如果你想導(dǎo)入模塊中的所有內(nèi)容,可以使用from import *的語法。
# 從math模塊導(dǎo)入log10函數(shù)
from math import log10
# 從os模塊導(dǎo)入所有內(nèi)容
from os import *
# 使用math模塊的log10函數(shù)
print(log10(100))
# 使用os模塊的cpu_count函數(shù)
print(cpu_count())
自定義模塊
????????除了導(dǎo)入系統(tǒng)的內(nèi)置模塊,還可以創(chuàng)建自定義模塊,并導(dǎo)入這個(gè)自定義模塊。比如:你有一個(gè)名為my_module.py的Python文件,其中定義了一個(gè)名為為my_func的函數(shù)。
# my_module.py文件
def my_func(a):
print(a)
????????你可以在另一個(gè)Python文件main.py中導(dǎo)入my_module模塊,并使用該模塊中的函數(shù)。
# main.py文件
import my_module
my_module.my_func('hello CSDN')
__name__
????????在Python中,__name__是一個(gè)特殊變量,用于表示一個(gè)模塊的名稱。當(dāng)一個(gè)模塊被直接運(yùn)行時(shí),__name__的值為__main__。當(dāng)該模塊被導(dǎo)入為庫或者子模塊時(shí),__name__的值將是該模塊的名稱。
????????這個(gè)變量常用于在模塊中執(zhí)行特定的代碼,只有當(dāng)該模塊被直接運(yùn)行時(shí)才執(zhí)行。在一個(gè)模塊中,可以使用if __name__ == "__main__"來確保后面的代碼只在該模塊被直接運(yùn)行時(shí)執(zhí)行,而在其他模塊中被導(dǎo)入時(shí)則不執(zhí)行。比如:有一個(gè)模塊my_sky,對(duì)應(yīng)的my_sky.py文件如下。
# my_sky.py
def sky_blue():
print('sky blue')
if __name__ == '__main__':
sky_blue()
????????直接運(yùn)行my_sky.py時(shí),會(huì)執(zhí)行sky_blue函數(shù)并輸出“sky blue”。但在另一個(gè)腳本中導(dǎo)入my_sky.py時(shí),并不會(huì)執(zhí)行sky_blue函數(shù)。這個(gè)特性常用于編寫可執(zhí)行腳本或測試腳本,只有在直接運(yùn)行該腳本時(shí),才會(huì)執(zhí)行某些操作。
什么是包
????????包是一個(gè)包含多個(gè)模塊的目錄,該目錄下必須包含一個(gè)名為__init__.py的文件,該文件可以為空。包可以嵌套,即一個(gè)包可以包含多個(gè)子包。包提供了組織模塊的機(jī)制,使得模塊能夠按照目錄結(jié)構(gòu)進(jìn)行分類,便于管理和查找。包將相關(guān)的代碼文件和資源文件打包在一起,從而形成一個(gè)獨(dú)立的單元。
????????Python的包可以包含:Python模塊、其他包、包特定的數(shù)據(jù)文件和配置文件。
創(chuàng)建包
????????要?jiǎng)?chuàng)建一個(gè)Python包,需要?jiǎng)?chuàng)建一個(gè)文件夾,通常以該包的名稱命名,并在該文件夾中包含一個(gè)__init__.py文件。這個(gè)__init__.py文件是一個(gè)特殊的文件,當(dāng)一個(gè)包被導(dǎo)入時(shí),該文件會(huì)自動(dòng)執(zhí)行,這可以用于初始化該包或定義在該包中導(dǎo)出的函數(shù)和變量。包中還可以包含其他的.py文件,這些文件中包含函數(shù)、類、變量等包的特定代碼。
????????創(chuàng)建一個(gè)Python包的具體步驟如下:
????????1、創(chuàng)建一個(gè)文件夾,作為包的根目錄,并命名為包的名字,包名通常使用小寫字母和下劃線。
????????2、在該文件夾中創(chuàng)建一個(gè)名為__init__.py的文件。這個(gè)文件是一個(gè)特殊的文件,當(dāng)一個(gè)包被導(dǎo)入時(shí),該文件會(huì)自動(dòng)執(zhí)行。這個(gè)文件可以是空的,也可以包含一些初始化代碼,或者定義在該包中導(dǎo)出的函數(shù)和變量。
????????3、在該文件夾中創(chuàng)建其他的Python文件和文件夾,用于包含包的具體代碼和資源。
????????4、如果需要在包的元數(shù)據(jù)中使用一些特殊的標(biāo)記或者依賴項(xiàng),可以在該文件夾中創(chuàng)建一個(gè)名為setup.py的文件,用于描述該包的元數(shù)據(jù)和依賴項(xiàng)。
????????下面是一個(gè)簡單的示例,展示了如何創(chuàng)建一個(gè)包含兩個(gè)模塊的Python包。
????????1、創(chuàng)建一個(gè)名為my_package的文件夾,作為包的根目錄。
????????2、在該文件夾中創(chuàng)建兩個(gè)Python文件,分別為module1.py和module2.py。
????????3、在module1.py中定義一個(gè)名為func1的函數(shù)。
# module1.py文件
def func1():
return "Hello from module 1"
????????4、在module2.py中定義一個(gè)名為func2的函數(shù)。
# module2.py文件
def func2():
return "Hello from module 2"
????????5、在my_package文件夾中創(chuàng)建一個(gè)名為__init__.py的文件,用于導(dǎo)出在模塊中定義的函數(shù)。
# __init__.py文件
from .module1 import func1
from .module2 import func2
????????6、現(xiàn)在,你可以在其他Python代碼中使用這個(gè)包了。
import my_package
# 輸出:Hello from module 1
print(my_package.func1())
# 輸出:Hello from module 2
print(my_package.func2())
導(dǎo)入包
????????要使用一個(gè)Python包,需要使用import語句來導(dǎo)入該包,并使用.操作符來訪問該包中的函數(shù)、類和變量等。比如:有一個(gè)名為my_package的包,其中包含一個(gè)名為my_module的模塊,my_module模塊中包含一個(gè)名為my_func的函數(shù),可以使用下面的示例代碼來使用該包。
import my_package.my_module
my_package.my_module.my_func()
????????在Python中,導(dǎo)入包的具體步驟如下:
????????1、確保已經(jīng)將包安裝到你的Python環(huán)境中,可以使用pip命令來安裝包,比如:pip install package_name。
????????2、使用import語句導(dǎo)入包,可以使用點(diǎn)號(hào)來指定包的路徑。在下面的示例代碼中,將導(dǎo)入package包中的module模塊。
import package.module
????????3、如果只想導(dǎo)入包中的某個(gè)模塊或函數(shù),可以使用from import語句。在下面的示例代碼中,將導(dǎo)入package包中的module模塊,并可以直接使用該模塊中的函數(shù)和變量。
from package import module
????????4、如果需要導(dǎo)入包中的多個(gè)模塊或函數(shù),可以使用逗號(hào)分隔它們。在下面的示例代碼中,將導(dǎo)入package包中的module1、module2、func1和func2。文章來源:http://www.zghlxwxcb.cn/news/detail-680528.html
from package import module1, module2, func1, func2
????????注意:包和模塊的名稱,必須與文件系統(tǒng)中的目錄結(jié)構(gòu)相對(duì)應(yīng)。如果包中沒有包含__init__.py文件,則不能將其視為一個(gè)包。此時(shí),需要手動(dòng)將該目錄添加到Python的模塊搜索路徑中才能正常使用。文章來源地址http://www.zghlxwxcb.cn/news/detail-680528.html
到了這里,關(guān)于7 Python的模塊和包的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!