日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

Python模塊化開發(fā):構(gòu)建可重用、可維護(hù)的代碼

來(lái)源: 責(zé)編: 時(shí)間:2023-11-08 17:03:09 260觀看
導(dǎo)讀在現(xiàn)代軟件開發(fā)中,模塊化開發(fā)已成為一種不可或缺的方法。它不僅為我們構(gòu)建復(fù)雜的應(yīng)用程序提供了架構(gòu)上的便利,還能夠提高代碼的可重用性、可維護(hù)性和可擴(kuò)展性。在Python這樣的高級(jí)編程語(yǔ)言中,模塊化開發(fā)的概念更是得到了

在現(xiàn)代軟件開發(fā)中,模塊化開發(fā)已成為一種不可或缺的方法。它不僅為我們構(gòu)建復(fù)雜的應(yīng)用程序提供了架構(gòu)上的便利,還能夠提高代碼的可重用性、可維護(hù)性和可擴(kuò)展性。在Python這樣的高級(jí)編程語(yǔ)言中,模塊化開發(fā)的概念更是得到了廣泛的應(yīng)用。通過將代碼拆分為獨(dú)立的模塊,我們能夠更好地組織和管理代碼,讓我們的項(xiàng)目變得更加靈活、可測(cè)試和可維護(hù)。zZ428資訊網(wǎng)——每日最新資訊28at.com

zZ428資訊網(wǎng)——每日最新資訊28at.com

一、自定義模塊

定義:一個(gè)模塊就是一個(gè)包含了python定義和聲明的文件,文件名就是模塊名字加上.py的后綴。封裝語(yǔ)句的最小單位,本質(zhì)就是.py文件。zZ428資訊網(wǎng)——每日最新資訊28at.com

自定義模塊:實(shí)際上就是定義.py,其中可以包含:變量定義,可執(zhí)行語(yǔ)句,for循環(huán),函數(shù)定義等等,它們統(tǒng)稱模塊的成員。(模塊本身不宜過大,便于維護(hù))zZ428資訊網(wǎng)——每日最新資訊28at.com

一個(gè)py文件拆分100文件,100個(gè)py文件又有相似相同的功能.冗余. 此時(shí)你要將100個(gè)py文件中相似相同的函數(shù)提取出來(lái), input 功能,print()功能, time.time() os.path.....放在一個(gè)文件,當(dāng)你想用這個(gè)功能拿來(lái)即用.類似于這個(gè)py文件: 常用的相似的功能集合模塊。zZ428資訊網(wǎng)——每日最新資訊28at.com

模塊就是一個(gè)py文件常用的相似的功能集合。zZ428資訊網(wǎng)——每日最新資訊28at.com

1.模塊和包

import hashlibdef encrypt(data):    """ 數(shù)據(jù)加密 """    hash_object = hashlib.md5()    hash_object.update(data.encode('utf-8'))    return hash_object.hexdigest()user = input("請(qǐng)輸入用戶名:")pwd = input("請(qǐng)輸入密碼:")md5_password = encrypt(pwd)message = "用戶名:{},密碼:{}".format(user, md5_password)print(message)

在開發(fā)簡(jiǎn)單的程序時(shí),使用一個(gè)py文件就可以搞定,如果程序比較龐大,需要10w行代碼,此時(shí)為了代碼結(jié)構(gòu)清晰,將功能按照某種規(guī)則拆分到不同的py文件中,使用時(shí)再去導(dǎo)入即可。另外,當(dāng)其他項(xiàng)目也需要此項(xiàng)目的某些模塊時(shí),也可以直接把模塊拿過去使用,增加重用性。zZ428資訊網(wǎng)——每日最新資訊28at.com

如果按照某個(gè)規(guī)則進(jìn)行拆分,發(fā)現(xiàn)拆分到 commons.py 中函數(shù)太多,也可以通過文件夾來(lái)進(jìn)行再次拆分,例如:zZ428資訊網(wǎng)——每日最新資訊28at.com

├── commons│   ├── convert.py│   ├── page.py│   └── utils.py└── run.py

在Python中一般對(duì)文件和文件的稱呼(很多開發(fā)者的平時(shí)開發(fā)中也有人都稱為模塊):zZ428資訊網(wǎng)——每日最新資訊28at.com

  • 一個(gè)py文件,模塊(module)。
  • 含多個(gè)py文件的文件夾,包(package)。

注意:在包(文件夾)中有一個(gè)默認(rèn)內(nèi)容為空的__init__.py的文件,一般用于描述當(dāng)前包的信息(在導(dǎo)入他下面的模塊時(shí),也會(huì)自動(dòng)加載)。zZ428資訊網(wǎng)——每日最新資訊28at.com

  • py2必須有,如果沒有導(dǎo)入包就會(huì)失敗。
  • py3可有可無(wú)。

2. 導(dǎo)入

當(dāng)定義好一個(gè)模塊或包之后,如果想要使用其中定義的功能,必須要先導(dǎo)入,然后再能使用。zZ428資訊網(wǎng)——每日最新資訊28at.com

導(dǎo)入,其實(shí)就是將模塊或包加載的內(nèi)存中,以后再去內(nèi)存中去拿就行。zZ428資訊網(wǎng)——每日最新資訊28at.com

關(guān)于導(dǎo)如時(shí)的路徑:zZ428資訊網(wǎng)——每日最新資訊28at.com

在Python內(nèi)部默認(rèn)設(shè)置了一些路徑,導(dǎo)入模塊或包時(shí),都會(huì)按照指定順序逐一去特定的路徑查找。zZ428資訊網(wǎng)——每日最新資訊28at.com

zZ428資訊網(wǎng)——每日最新資訊28at.com

import sysprint(sys.path)
[    '當(dāng)前執(zhí)行腳本所在的目錄', /Users/wupeiqi/PycharmProjects/luffyCourse/day14/bin /Users/wupeiqi/PycharmProjects/luffyCourse/day14    '/Applications/PyCharm.app/Contents/plugins/python/helpers/pycharm_display',    '/Library/Frameworks/Python.framework/Versions/3.9/lib/python39.zip',    '/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9',    '/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/lib-dynload',    '/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages',    '/Applications/PyCharm.app/Contents/plugins/python/helpers/pycharm_matplotlib_backend'    ]

windows:zZ428資訊網(wǎng)——每日最新資訊28at.com

[    'C://Users//Administrator//Desktop//pythonPro//01.核心編程//8.模塊',     'C://Users//Administrator//AppData//Local//Programs//Python//Python39//python39.zip',     'C://Users//Administrator//AppData//Local//Programs//Python//Python39//DLLs',     'C://Users//Administrator//AppData//Local//Programs//Python//Python39//lib',     'C://Users//Administrator//AppData//Local//Programs//Python//Python39',     'C://Users//Administrator//AppData//Roaming//Python//Python39//site-packages',     'C://Users//Administrator//AppData//Roaming//Python//Python39//site-packages//win32',     'C://Users//Administrator//AppData//Roaming//Python//Python39//site-packages//win32//lib',     'C://Users//Administrator//AppData//Roaming//Python//Python39//site-packages//Pythonwin',     'C://Users//Administrator//AppData//Local//Programs//Python//Python39//lib//site-packages']

想要導(dǎo)入任意的模塊和包,都必須寫在如下路徑下,才能被找到。zZ428資訊網(wǎng)——每日最新資訊28at.com

也可以自動(dòng)手動(dòng)在sys.path中添加指定路徑,然后再導(dǎo)入可以,例如:zZ428資訊網(wǎng)——每日最新資訊28at.com

import syssys.path.append("路徑A")import xxxxx  # 導(dǎo)入路徑A下的一個(gè)xxxxx.py文件

你以后寫模塊名稱時(shí),千萬(wàn)不能和內(nèi)置和第三方的同名(新手容易犯錯(cuò)誤)。zZ428資訊網(wǎng)——每日最新資訊28at.com

項(xiàng)目執(zhí)行文件一般都在項(xiàng)目根目錄,如果執(zhí)行文件嵌套的內(nèi)存目錄,就需要自己手動(dòng)在sys.path中添加路徑。zZ428資訊網(wǎng)——每日最新資訊28at.com

pycharm中默認(rèn)會(huì)將項(xiàng)目目錄加入到sys.path中。zZ428資訊網(wǎng)——每日最新資訊28at.com

關(guān)于導(dǎo)入的方式:zZ428資訊網(wǎng)——每日最新資訊28at.com

導(dǎo)入本質(zhì)上是將某個(gè)文件中的內(nèi)容先加載到內(nèi)存中,然后再去內(nèi)存中拿過來(lái)使用。而在Python開發(fā)中常用的導(dǎo)入的方式有2類方式,每類方式都也多種情況。zZ428資訊網(wǎng)——每日最新資訊28at.com

第一類:import xxxx(開發(fā)中,一般多用于導(dǎo)入sys.path目錄下的一個(gè)py文件)zZ428資訊網(wǎng)——每日最新資訊28at.com

  • 模塊級(jí)別
├── commons│   ├── __init__.py│   ├── convert.py│   ├── page.py│   ├── tencent│   │   ├── __init__.py│   │   ├── sms.py│   │   └── wechat.py│   └── utils.py├── many.py└── run.py
  • 包級(jí)別
├── commons│   ├── __init__.py│   ├── convert.py│   ├── page.py│   └── utils.py├── third│   ├── __init__.py│   ├── ali│   │   └── oss.py│   └── tencent│       ├── __init__.py│       ├── __pycache__│       ├── sms.py│       └── wechat.py└── run.py

第二類:from xxx import xxx 【常用】,一般適用于多層嵌套和導(dǎo)入模塊中某個(gè)成員的情況。zZ428資訊網(wǎng)——每日最新資訊28at.com

成員級(jí)別:zZ428資訊網(wǎng)——每日最新資訊28at.com

├── commons│   ├── __init__.py│   ├── convert.py│   ├── page.py│   └── utils.py├── many.py└── run.py

提示:基于from模式也可以支持 from many import *,即:導(dǎo)入一個(gè)模塊中所有的成員(可能會(huì)重名,所以用的少)。zZ428資訊網(wǎng)——每日最新資訊28at.com

模塊級(jí)別:zZ428資訊網(wǎng)——每日最新資訊28at.com

├── commons│   ├── __init__.py│   ├── convert.py│   ├── page.py│   └── utils.py├── many.py└── run.py

包級(jí)別:zZ428資訊網(wǎng)——每日最新資訊28at.com

├── commons│   ├── __init__.py│   ├── convert.py│   ├── page.py│   ├── tencent│   │   ├── __init__.py│   │   ├── sms.py│   │   └── wechat.py│   └── utils.py├── many.py└── run.py

3. 相對(duì)導(dǎo)入

在導(dǎo)入模塊時(shí),對(duì)于 from xx import xx這種模式,還支持相對(duì)到導(dǎo)入。切記,相對(duì)導(dǎo)入只能用在包中的py文件中(即:嵌套在文件中的py文件才可以使用,項(xiàng)目根目錄下無(wú)法使用)。zZ428資訊網(wǎng)——每日最新資訊28at.com

4. 導(dǎo)入別名

如果項(xiàng)目中導(dǎo)入 成員/模塊/包 有重名,那么后導(dǎo)入的會(huì)覆蓋之前導(dǎo)入,為了避免這種情況的發(fā)生,Python支持重命名,即:zZ428資訊網(wǎng)——每日最新資訊28at.com

from xxx.xxx import xx as xoimport x1.x2 as pg

除此之外,有了as的存在,讓 import xx.xxx.xxxx.xxx 在調(diào)用執(zhí)行時(shí),會(huì)更加簡(jiǎn)單(「不常用,了解即可」)。zZ428資訊網(wǎng)——每日最新資訊28at.com

原來(lái):zZ428資訊網(wǎng)——每日最新資訊28at.com

import commons.pagev1 = commons.page.pagination()

現(xiàn)在:zZ428資訊網(wǎng)——每日最新資訊28at.com

import commons.page as pgv1 = pg.pagination()

5. 主文件

執(zhí)行一個(gè)py文件時(shí):zZ428資訊網(wǎng)——每日最新資訊28at.com

__name__ = "__main__"

導(dǎo)入一個(gè)py文件時(shí):zZ428資訊網(wǎng)——每日最新資訊28at.com

__name__ = "模塊名"

主文件,其實(shí)就是在程序執(zhí)行的入口文件,例如:zZ428資訊網(wǎng)——每日最新資訊28at.com

├── commons│   ├── __init__.py│   ├── convert.py│   ├── page.py│   ├── tencent│   │   ├── __init__.py│   │   ├── sms.py│   │   └── wechat.py│   └── utils.py├── many.py└── run.py

我們通常是執(zhí)行 run.py 去運(yùn)行程序,其他的py文件都是一些功能代碼。當(dāng)我們?nèi)?zhí)行一個(gè)文件時(shí),文件內(nèi)部的 __name__變量的值為 main,所以,主文件經(jīng)常會(huì)看到:zZ428資訊網(wǎng)——每日最新資訊28at.com

import manyfrom commons import pagefrom commons import utilsdef start():    v1 = many.show()    v2 = page.pagination()    v3 = utils.encrypt()if __name__ == '__main__':    start()

只有是以主文件的形式運(yùn)行此腳本時(shí)start函數(shù)才會(huì)執(zhí)行,被導(dǎo)入時(shí)則不會(huì)被執(zhí)行。zZ428資訊網(wǎng)——每日最新資訊28at.com

二、第三方模塊

第三方模塊6000種左右,pip install 需要這個(gè)指令安裝的模塊,Beautiful_soup,request,Django,flask 等等。Python內(nèi)部提供的模塊有限,所以在平時(shí)在開發(fā)的過程中,經(jīng)常會(huì)使用第三方模塊。而第三方模塊必須要先安裝才能可以使用,下面介紹常見的3中安裝第三方模塊的方式。其實(shí),使用第三方模塊的行為就是去用別人寫好并開源出來(lái)的py代碼,這樣自己拿來(lái)就用,不必重復(fù)造輪子了。。。。zZ428資訊網(wǎng)——每日最新資訊28at.com

1. pip(最常用)

這是Python中最最最常用的安裝第三方模塊的方式。zZ428資訊網(wǎng)——每日最新資訊28at.com

pip其實(shí)是一個(gè)第三方模塊包管理工具,默認(rèn)安裝Python解釋器時(shí)自動(dòng)會(huì)安裝,默認(rèn)目錄:zZ428資訊網(wǎng)——每日最新資訊28at.com

MAC系統(tǒng),即:Python安裝路徑的bin目錄下 /Library/Frameworks/Python.framework/Versions/3.9/bin/pip3 /Library/Frameworks/Python.framework/Versions/3.9/bin/pip3.9 Windows系統(tǒng),即:Python安裝路徑的scripts目錄下 C:/Python39/Scripts/pip3.exe C:/Python39/Scripts/pip3.9.exe

提示:為了方便在終端運(yùn)行pip管理工具,我們也會(huì)把它所在的路徑添加到系統(tǒng)環(huán)境變量中。zZ428資訊網(wǎng)——每日最新資訊28at.com

pip3 install 模塊名稱

默認(rèn)安裝的是最新的版本,如果想要指定版本:zZ428資訊網(wǎng)——每日最新資訊28at.com

pip3 install 模塊名稱==版本例如:pip3 install django==2.2

(1) pip更新zZ428資訊網(wǎng)——每日最新資訊28at.com

上圖的黃色字體提示:目前我電腦上的pip是20.2.3版本,最新的是 20.3.3 版本,如果想要升級(jí)為最新的版本,可以在終端執(zhí)行他提示的命令:zZ428資訊網(wǎng)——每日最新資訊28at.com

/Library/Frameworks/Python.framework/Versions/3.9/bin/python3.9 -m pip install --upgrade pip

注意:根據(jù)自己電腦的提示命令去執(zhí)行,不要用我這里的提示命令哈。zZ428資訊網(wǎng)——每日最新資訊28at.com

(2) 豆瓣源zZ428資訊網(wǎng)——每日最新資訊28at.com

pip默認(rèn)是去 https://pypi.org 去下載第三方模塊(本質(zhì)上就是別人寫好的py代碼),國(guó)外的網(wǎng)站速度會(huì)比較慢,為了加速可以使用國(guó)內(nèi)的豆瓣源。因此可以設(shè)置鏡像源的方式:zZ428資訊網(wǎng)——每日最新資訊28at.com

一次性使用:zZ428資訊網(wǎng)——每日最新資訊28at.com

pip3.9 install 模塊名稱  -i  https://pypi.douban.com/simple/

永久使用(配置):zZ428資訊網(wǎng)——每日最新資訊28at.com

# 在終端執(zhí)行如下命令pip3.9 config set global.index-url https://pypi.douban.com/simple/# 執(zhí)行完成后,提示在我的本地文件中寫入了豆瓣源,以后再通過pip去安裝第三方模塊時(shí),就會(huì)默認(rèn)使用豆瓣源了。# 自己以后也可以打開文件直接修改源地址。Writing to /Users/wupeiqi/.config/pip/pip.conf

寫在最后,也還有其他的源可供選擇(豆瓣應(yīng)用廣泛):zZ428資訊網(wǎng)——每日最新資訊28at.com

阿里云:http://mirrors.aliyun.com/pypi/simple/中國(guó)科技大學(xué):https://pypi.mirrors.ustc.edu.cn/simple/ 清華大學(xué):https://pypi.tuna.tsinghua.edu.cn/simple/中國(guó)科學(xué)技術(shù)大學(xué):http://pypi.mirrors.ustc.edu.cn/simple/

2. 其他方式

(1) 源碼zZ428資訊網(wǎng)——每日最新資訊28at.com

如果要安裝的模塊在pypi.org中不存在 或 因特殊原因無(wú)法通過pip install 安裝時(shí),可以直接下載源碼,然后基于源碼安裝,由于這種方式比較繁瑣,這里有想法的可以自己去探索。zZ428資訊網(wǎng)——每日最新資訊28at.com

(2) 基于wheelzZ428資訊網(wǎng)——每日最新資訊28at.com

wheel是Python的第三方模塊包的文件格式的一種,我們也可以基于wheel去安裝一些第三方模塊。安裝wheel格式支持,這樣pip再安裝第三方模塊時(shí),就可以處理wheel格式的文件了。zZ428資訊網(wǎng)——每日最新資訊28at.com

pip3.9 install wheel

下載第三方的包(wheel格式),例如:zZ428資訊網(wǎng)——每日最新資訊28at.com

進(jìn)入下載目錄,在終端基于pip直接安裝:zZ428資訊網(wǎng)——每日最新資訊28at.com

pip3 install requests-2.25.1-py2.py3-none-any.whl

無(wú)論通過什么形式去安裝第三方模塊,默認(rèn)模塊的安裝路徑在:zZ428資訊網(wǎng)——每日最新資訊28at.com

Max系統(tǒng): /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packagesWindows系統(tǒng): C:/Python39/Lib/site-packages/

提醒:這個(gè)目錄在sys.path中,所以我們直接在代碼中直接導(dǎo)入下載的第三方包是沒問題的。zZ428資訊網(wǎng)——每日最新資訊28at.com

三、內(nèi)置模塊

內(nèi)置模塊200種左右,python解釋器自帶的模塊,time os sys hashlib等等。zZ428資訊網(wǎng)——每日最新資訊28at.com

Python內(nèi)置的模塊有很多,我們也已經(jīng)接觸了不少相關(guān)模塊,接下來(lái)咱們就來(lái)做一些匯總和介紹。zZ428資訊網(wǎng)——每日最新資訊28at.com

內(nèi)置模塊有很多 & 模塊中的功能也非常多,我們是沒有辦法注意全局給大家講解,在此我會(huì)整理出項(xiàng)目開發(fā)最常用的來(lái)進(jìn)行講解。zZ428資訊網(wǎng)——每日最新資訊28at.com

1.os模塊

OS提供了一些關(guān)于文件操作的功能:zZ428資訊網(wǎng)——每日最新資訊28at.com

import os# 1. 獲取當(dāng)前腳本絕對(duì)路徑abs_path = os.path.abspath(__file__)print(abs_path)# 2. 獲取當(dāng)前文件的上級(jí)目錄base_path = os.path.dirname( os.path.dirname(路徑) )print(base_path)# 3. 路徑拼接p1 = os.path.join(base_path, 'xx')print(p1)p2 = os.path.join(base_path, 'xx', 'oo', 'a1.png')print(p2)# 4. 判斷路徑是否存在exists = os.path.exists(p1)print(exists)# 5. 創(chuàng)建文件夾os.makedirs(路徑)path = os.path.join(base_path, 'xx', 'oo', 'uuuu')if not os.path.exists(path):    os.makedirs(path)# 6. 是否是文件夾file_path = os.path.join(base_path, 'xx', 'oo', 'uuuu.png')is_dir = os.path.isdir(file_path)print(is_dir) # Falsefolder_path = os.path.join(base_path, 'xx', 'oo', 'uuuu')is_dir = os.path.isdir(folder_path)print(is_dir) # True# 7. 刪除文件或文件夾os.remove("文件路徑")

2. random

此模塊提供了和隨機(jī)數(shù)獲取相關(guān)的方法:zZ428資訊網(wǎng)——每日最新資訊28at.com

  • random.random():獲取從[0.0 , 1.0) 范圍內(nèi)的浮點(diǎn)數(shù)。
improt randomprint(random.random())# 0.8595089778726372
  • random.randint(a,b):獲取[a,b] 范圍內(nèi)的整數(shù)。
print(random.randint(3,10))
  • random.uniform(a,b):獲取[a,b) 范圍內(nèi)的浮點(diǎn)數(shù)。   取決于操作系統(tǒng)
print(random.uniform(3,5))
  • random.shuffle(x):把參數(shù)指定的數(shù)據(jù)中的元素打亂,其中參數(shù)必須是可變數(shù)據(jù)類型。混洗。(直接修改原列表)
lst = list(range(10))random.shuffle(lst)print(lst)# [4, 6, 2, 7, 0, 8, 9, 3, 5, 1]
  • random.choice(seq):函數(shù)可以從非空序列中取出一個(gè)隨機(jī)元素。
alist = list('abcdef')random.choice(alist)
  • random.choices(population, weights=None, *, cum_weights=None, k=1)函數(shù)可以從總體中隨機(jī)抽取(有放回抽樣)出容量為k的樣本并返回樣本的列表,可以通過參數(shù)指定個(gè)體的權(quán)重,如果沒有指定權(quán)重,個(gè)體被選中的概率均等。
random.choices(alist,k=4)# ['b', 'f', 'b', 'f']
  • random.sample(x,k):從x中隨機(jī)取k個(gè)數(shù)據(jù),組成一個(gè)列表返回。  (從不可變數(shù)據(jù)類型中取)(變相打亂元組,數(shù)據(jù))
t = (1,2,3)lst = random.sample(t,len(t))print(lst)

小應(yīng)用:驗(yàn)證碼zZ428資訊網(wǎng)——每日最新資訊28at.com

import randomdef get_random_code(length=6):    data = []    for i in range(length):        v = random.randint(65,90)        data.append(chr(v))    return  ''.join(data)code = get_random_code()print(code)

關(guān)于內(nèi)置模塊還有很多,這里我們不做更多的介紹,會(huì)在后面繼續(xù)更新...zZ428資訊網(wǎng)——每日最新資訊28at.com

四、項(xiàng)目開發(fā)規(guī)范

現(xiàn)階段,我們?cè)陂_發(fā)一些程序時(shí)(終端運(yùn)行),應(yīng)該遵循一些結(jié)構(gòu)的規(guī)范,讓你的系統(tǒng)更加專業(yè)。zZ428資訊網(wǎng)——每日最新資訊28at.com

1. 單文件應(yīng)用

當(dāng)基于python開發(fā)簡(jiǎn)單應(yīng)用時(shí)(一個(gè)py文件就能搞定),需要注意如下幾點(diǎn)。zZ428資訊網(wǎng)——每日最新資訊28at.com

"""1.文件注釋"""# 2.導(dǎo)包(內(nèi)置,第三方,自定義)import reimport randomimport requestsfrom openpyxl import load_workbook# 3.全局變量大寫DB = "XXX"# 4.函數(shù)名規(guī)范,函數(shù)功能注釋def do_something():    """ 函數(shù)注釋 """    # TODO # 5.待完成時(shí),下一期實(shí)現(xiàn)xxx功能    for i in range(10):        passdef run():    """ 函數(shù)注釋 """    # 對(duì)功能代碼進(jìn)行注釋  # 6.部分功能代碼注釋    text = input(">>>")    print(text)# 7.主文件if __name__ == '__main__':    run()

2. 單可執(zhí)行文件

新創(chuàng)建一個(gè)項(xiàng)目,假設(shè)名字叫 【crm】,可以創(chuàng)建如下文件和文件夾來(lái)存放代碼和數(shù)據(jù)。zZ428資訊網(wǎng)——每日最新資訊28at.com

crm├── app.py        文件,程序的主文件(盡量精簡(jiǎn))├── config.py     文件,配置文件(放相關(guān)配置信息,代碼中讀取配置信息,如果想要修改配置,即可以在此修改,不用再去代碼中逐一修改了)├── db            文件夾,存放數(shù)據(jù)├── files         文件夾,存放文件├── src           包,業(yè)務(wù)處理的代碼└── utils         包,公共功能

3. 多可執(zhí)行文件

新創(chuàng)建項(xiàng)目,假設(shè)名稱叫【killer】,可以創(chuàng)建如下文件和文件夾來(lái)存放代碼和數(shù)據(jù)。zZ428資訊網(wǎng)——每日最新資訊28at.com

killer├── bin     文件夾,存放多個(gè)主文件(可運(yùn)行)│   ├── app1.py│   └── app2.py├── config              包,配置文件│   ├── __init__.py│   └── settings.py├── db                  文件夾,存放數(shù)據(jù)├── files               文件夾,存放文件├── src                 包,業(yè)務(wù)代碼│   └── __init__.py└── utils               包,公共功能    └── __init__.py

4. 項(xiàng)目結(jié)構(gòu)

設(shè)計(jì)項(xiàng)目目錄結(jié)構(gòu)的作用:zZ428資訊網(wǎng)——每日最新資訊28at.com

  • 可讀性高: 不熟悉這個(gè)項(xiàng)目代碼的人,一眼就能看懂目錄結(jié)構(gòu),知道程序啟動(dòng)腳本是哪個(gè),測(cè)試目錄在哪兒,配置文件在哪兒等等。從而非常快速的了解這個(gè)項(xiàng)目。
  • 可維護(hù)性高: 定義好組織規(guī)則后,維護(hù)者就能很明確地知道,新增的哪個(gè)文件和代碼應(yīng)該放在什么目錄之下。這個(gè)好處是,隨著時(shí)間的推移,代碼/配置的規(guī)模增加,項(xiàng)目結(jié)構(gòu)不會(huì)混亂,仍然能夠組織良好。

較好的目錄結(jié)構(gòu)方式(推薦)zZ428資訊網(wǎng)——每日最新資訊28at.com

zZ428資訊網(wǎng)——每日最新資訊28at.com

  • bin是一個(gè)存放啟動(dòng)文件的目錄,不管你文件的名字叫什么你只要放到bin目錄下大家就知道這是一個(gè)啟動(dòng)文件:
#===============>start.py# 開啟項(xiàng)目的start文件。import sys,osBASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))sys.path.append(BASE_DIR)from core import srcif __name__ == '__main__':    src.run()
  • cores是一個(gè)存放項(xiàng)目的主邏輯,比如購(gòu)物車,里邊寫的就是登陸充值購(gòu)買等功能;
#===============>src.py# 主要邏輯部分:# 核心邏輯,代碼放在這。from conf import settingsfrom lib import commonimport timelogger=common.get_logger(__name__)current_user={'user':None,'login_time':None,'timeout':int(settings.LOGIN_TIMEOUT)}def auth(func):    def wrapper(*args,**kwargs):        pass    return wrapper@authdef buy():    print('buy...')@authdef run():    print('''購(gòu)物查看余額轉(zhuǎn)賬
  • lib是存放有一個(gè)公共組件的目錄,什么是公共組件,就是在這個(gè)項(xiàng)目中陪別的功能頻繁使用的功能;
#===============>common.py# 公共組件放在這里:公共功能部分。from conf import settingsimport loggingimport logging.configimport jsondef get_logger(name):    logging.config.dictConfig(settings.LOGGING_DIC)  # 導(dǎo)入上面定義的logging配置    logger = logging.getLogger(name)  # 生成一個(gè)log實(shí)例    return loggerdef conn_db():    db_path=settings.DB_PATH    dic=json.load(open(db_path,'r',encoding='utf-8'))    return dic
  • conf 是一個(gè)存放配置文件的目錄,配置文件就是文件中的一些全局變量移到這里;
#===============>settings.py# 配置文件,放一些路徑或者信息等配置import osBASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))DB_PATH=os.path.join(BASE_DIR,'db','db.json')LOG_PATH=os.path.join(BASE_DIR,'log','access.log')LOGIN_TIMEOUT=5
  • db是存放這個(gè)項(xiàng)目需要使用到的一些文件;
// ===============>db.json// 重要數(shù)據(jù)放在這里{    "students":[        {"name":"lisa","age":18},        {"name":"jack","age":18},        //  ...    ]}
  • log是這個(gè)項(xiàng)目需要記錄的日志文件存放位置;
"""logging配置"""# 定義三種日志輸出格式standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' /                  '[%(levelname)s][%(message)s]' #其中name為getlogger指定的名字simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'# log配置字典LOGGING_DIC = {    # xxx}

5. 關(guān)于README的內(nèi)容

每個(gè)項(xiàng)目都應(yīng)該有的一個(gè)文件,目的是能簡(jiǎn)要描述該項(xiàng)目的信息,讓讀者快速了解這個(gè)項(xiàng)目。它需要說(shuō)明以下幾個(gè)事項(xiàng):zZ428資訊網(wǎng)——每日最新資訊28at.com

  • 軟件定位,軟件的基本功能。
  • 運(yùn)行代碼的方法: 安裝環(huán)境、啟動(dòng)命令等。
  • 簡(jiǎn)要的使用說(shuō)明。
  • 代碼目錄結(jié)構(gòu)說(shuō)明,更詳細(xì)點(diǎn)可以說(shuō)明軟件的基本原理。
  • 常見問題說(shuō)明。

五、總結(jié)

模塊化開發(fā)是Python編程中的一個(gè)重要實(shí)踐。通過將代碼分解為獨(dú)立的模塊,我們可以更好地管理、組織和復(fù)用代碼。模塊化開發(fā)使得我們的項(xiàng)目更易于擴(kuò)展、維護(hù)和測(cè)試,并且還可以加速開發(fā)過程。在實(shí)際應(yīng)用中,我們可以采用各種技術(shù)和工具來(lái)實(shí)現(xiàn)模塊化開發(fā),如使用Python的內(nèi)置模塊、第三方庫(kù)、包管理工具等。通過運(yùn)用模塊化開發(fā)的原則和技巧,我們能夠編寫出結(jié)構(gòu)清晰、易于理解和更具可持續(xù)性的Python代碼。zZ428資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-17764-0.htmlPython模塊化開發(fā):構(gòu)建可重用、可維護(hù)的代碼

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 解析Python的深淺拷貝機(jī)制

下一篇: Jest:目前最廣泛使用的前端 JavaScript 測(cè)試框架

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 中興AX5400Pro+上手體驗(yàn):再升級(jí) 雙2.5G網(wǎng)口+USB 3.0這次全都有

    2021年11月的時(shí)候,中興先后發(fā)布了兩款路由器產(chǎn)品,中興AX5400和中興AX5400 Pro,從產(chǎn)品命名上就不難看出這是隸屬于同一系列的,但在外觀設(shè)計(jì)上這兩款產(chǎn)品可以說(shuō)是完全沒一點(diǎn)關(guān)系
  • 28個(gè)SpringBoot項(xiàng)目中常用注解,日常開發(fā)、求職面試不再懵圈

    前言在使用SpringBoot開發(fā)中或者在求職面試中都會(huì)使用到很多注解或者問到注解相關(guān)的知識(shí)。本文主要對(duì)一些常用的注解進(jìn)行了總結(jié),同時(shí)也會(huì)舉出具體例子,供大家學(xué)習(xí)和參考。注解
  • 之家push系統(tǒng)迭代之路

    前言在這個(gè)信息爆炸的互聯(lián)網(wǎng)時(shí)代,能夠及時(shí)準(zhǔn)確獲取信息是當(dāng)今社會(huì)要解決的關(guān)鍵問題之一。隨著之家用戶體量和內(nèi)容規(guī)模的不斷增大,傳統(tǒng)的靠"主動(dòng)拉"獲取信息的方式已不能滿足用
  • 如何通過Python線程池實(shí)現(xiàn)異步編程?

    線程池的概念和基本原理線程池是一種并發(fā)處理機(jī)制,它可以在程序啟動(dòng)時(shí)創(chuàng)建一組線程,并將它們置于等待任務(wù)的狀態(tài)。當(dāng)任務(wù)到達(dá)時(shí),線程池中的某個(gè)線程會(huì)被喚醒并執(zhí)行任務(wù),執(zhí)行完任
  • 零售大模型“干中學(xué)”,攀爬數(shù)字化珠峰

    文/侯煜編輯/cc來(lái)源/華爾街科技眼對(duì)于絕大多數(shù)登山愛好者而言,攀爬珠穆朗瑪峰可謂終極目標(biāo)。攀登珠峰的商業(yè)路線有兩條,一是尼泊爾境內(nèi)的南坡路線,一是中國(guó)境內(nèi)的北坡路線。相
  • 阿里大調(diào)整

    來(lái)源:產(chǎn)品劉有媒體報(bào)道稱,近期淘寶天貓集團(tuán)啟動(dòng)了近年來(lái)最大的人力制度改革,涉及員工績(jī)效、層級(jí)體系等多個(gè)核心事項(xiàng),目前已形成一個(gè)初步的“征求意見版”:1、取消P序列
  • 阿里瓴羊One推出背后,零售企業(yè)迎數(shù)字化新解

    作者:劉曠近年來(lái)隨著數(shù)字經(jīng)濟(jì)的高速發(fā)展,各式各樣的SaaS應(yīng)用服務(wù)更是層出不窮,但本質(zhì)上SaaS大多局限于單一業(yè)務(wù)流層面,對(duì)用戶核心關(guān)切的增長(zhǎng)問題等則沒有提供更好的解法。在Saa
  • 微博大門常打開,迎接海外畫師漂洋東渡

    作者:互聯(lián)網(wǎng)那些事“起猛了,我能看得懂日語(yǔ)了”。“為什么日本人說(shuō)話我能聽懂?”“中文不像中文,日語(yǔ)不像日語(yǔ),但是我竟然看懂了”…&hell
  • SN570 NVMe SSD固態(tài)硬盤 價(jià)格與性能兼具

    SN570 NVMe SSD固態(tài)硬盤是西部數(shù)據(jù)發(fā)布的最新一代WD Blue系列的固態(tài)硬盤,不僅閃存技術(shù)更為精進(jìn),性能也得到了進(jìn)一步的躍升。WD Blue SN570 NVMe SSD的包裝外
Top 主站蜘蛛池模板: 内丘县| 长海县| 辉县市| 晋宁县| 昔阳县| 旺苍县| 即墨市| 古蔺县| 澄江县| 赣州市| 伊川县| 临湘市| 株洲县| 太谷县| 长泰县| 临夏县| 自贡市| 敦化市| 甘肃省| 利津县| 蓬溪县| 田林县| 连平县| 蒲江县| 龙口市| 镇赉县| 喀喇| 安顺市| 轮台县| 龙胜| 保山市| 叙永县| 克什克腾旗| 鸡东县| 安平县| 贵南县| 威远县| 南投市| 上高县| 承德市| 沛县|