AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

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

來(lái)源: 責(zé)編: 時(shí)間:2023-11-08 17:03:09 283觀看
導(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)用。通過(guò)將代碼拆分為獨(dú)立的模塊,我們能夠更好地組織和管理代碼,讓我們的項(xiàng)目變得更加靈活、可測(cè)試和可維護(hù)。LE928資訊網(wǎng)——每日最新資訊28at.com

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

一、自定義模塊

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

自定義模塊:實(shí)際上就是定義.py,其中可以包含:變量定義,可執(zhí)行語(yǔ)句,for循環(huán),函數(shù)定義等等,它們統(tǒng)稱模塊的成員。(模塊本身不宜過(guò)大,便于維護(hù))LE928資訊網(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文件: 常用的相似的功能集合模塊。LE928資訊網(wǎng)——每日最新資訊28at.com

模塊就是一個(gè)py文件常用的相似的功能集合。LE928資訊網(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í),也可以直接把模塊拿過(guò)去使用,增加重用性。LE928資訊網(wǎng)——每日最新資訊28at.com

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

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

在Python中一般對(duì)文件和文件的稱呼(很多開發(fā)者的平時(shí)開發(fā)中也有人都稱為模塊):LE928資訊網(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)加載)。LE928資訊網(wǎng)——每日最新資訊28at.com

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

2. 導(dǎo)入

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

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

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

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

LE928資訊網(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:LE928資訊網(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)入任意的模塊和包,都必須寫在如下路徑下,才能被找到。LE928資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

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

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

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

第一類:import xxxx(開發(fā)中,一般多用于導(dǎo)入sys.path目錄下的一個(gè)py文件)LE928資訊網(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è)成員的情況。LE928資訊網(wǎng)——每日最新資訊28at.com

成員級(jí)別:LE928資訊網(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ì)重名,所以用的少)。LE928資訊網(wǎng)——每日最新資訊28at.com

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

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

包級(jí)別:LE928資訊網(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ú)法使用)。LE928資訊網(wǎng)——每日最新資訊28at.com

4. 導(dǎo)入別名

如果項(xiàng)目中導(dǎo)入 成員/模塊/包 有重名,那么后導(dǎo)入的會(huì)覆蓋之前導(dǎo)入,為了避免這種情況的發(fā)生,Python支持重命名,即:LE928資訊網(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)單(「不常用,了解即可」)。LE928資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

5. 主文件

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

__name__ = "__main__"

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

__name__ = "模塊名"

主文件,其實(shí)就是在程序執(zhí)行的入口文件,例如:LE928資訊網(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ì)看到:LE928資訊網(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í)行。LE928資訊網(wǎng)——每日最新資訊28at.com

二、第三方模塊

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

1. pip(最常用)

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

pip其實(shí)是一個(gè)第三方模塊包管理工具,默認(rèn)安裝Python解釋器時(shí)自動(dòng)會(huì)安裝,默認(rèn)目錄:LE928資訊網(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)境變量中。LE928資訊網(wǎng)——每日最新資訊28at.com

pip3 install 模塊名稱

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

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

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

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

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

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

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

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

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

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

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

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

寫在最后,也還有其他的源可供選擇(豆瓣應(yīng)用廣泛):LE928資訊網(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) 源碼LE928資訊網(wǎng)——每日最新資訊28at.com

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

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

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

pip3.9 install wheel

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

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

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

無(wú)論通過(guò)什么形式去安裝第三方模塊,默認(rèn)模塊的安裝路徑在:LE928資訊網(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)入下載的第三方包是沒(méi)問(wèn)題的。LE928資訊網(wǎng)——每日最新資訊28at.com

三、內(nèi)置模塊

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

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

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

1.os模塊

OS提供了一些關(guān)于文件操作的功能:LE928資訊網(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)的方法:LE928資訊網(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的樣本并返回樣本的列表,可以通過(guò)參數(shù)指定個(gè)體的權(quán)重,如果沒(méi)有指定權(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)證碼LE928資訊網(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ù)更新...LE928資訊網(wǎng)——每日最新資訊28at.com

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

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

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

當(dāng)基于python開發(fā)簡(jiǎn)單應(yīng)用時(shí)(一個(gè)py文件就能搞定),需要注意如下幾點(diǎn)。LE928資訊網(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ù)。LE928資訊網(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ù)。LE928資訊網(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)的作用:LE928資訊網(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)方式(推薦)LE928資訊網(wǎng)——每日最新資訊28at.com

LE928資訊網(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):LE928資訊網(wǎng)——每日最新資訊28at.com

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

五、總結(jié)

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

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

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

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

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

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 帥氣純真少年!日本最帥初中生選美冠軍出爐

    日本第一帥哥初一生選美大賽冠軍現(xiàn)已正式出爐,冠軍是來(lái)自千葉縣的宗田悠良。日本一直熱衷于各種選美大賽,從“最美JK”起到“最美女星&r
  • Golang 中的 io 包詳解:組合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是對(duì)Reader和Writer接口的組合,
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時(shí)候了!學(xué)弟,最近學(xué)習(xí)的怎么樣啊 了不起學(xué)弟:最近學(xué)習(xí)的還不錯(cuò),每天都在學(xué)習(xí),每天都在進(jìn)步! 了不起:那你最近學(xué)習(xí)的什么呢? 了不起學(xué)弟:最近在學(xué)習(xí)C
  • 新電商三兄弟,“抖快紅”成團(tuán)!

    來(lái)源:價(jià)值研究所作 者:Hernanderz 隨著內(nèi)容電商的概念興起,抖音、快手、小紅書組成的“新電商三兄弟”成為業(yè)內(nèi)一股不可忽視的勢(shì)力,給阿里、京東、拼多多帶去了巨大壓
  • 東方甄選單飛:有些鳥注定是關(guān)不住的

    文/彭寬鴻編輯/羅卿東方甄選創(chuàng)始人俞敏洪帶隊(duì)的“7天甘肅行”直播活動(dòng)已在近日順利收官。成立后一年多時(shí)間里,東方甄選要脫離抖音自立門戶的傳聞不絕于耳,“7
  • 微博大門常打開,迎接海外畫師漂洋東渡

    作者:互聯(lián)網(wǎng)那些事“起猛了,我能看得懂日語(yǔ)了”。“為什么日本人說(shuō)話我能聽懂?”“中文不像中文,日語(yǔ)不像日語(yǔ),但是我竟然看懂了”…&hell
  • 小米公益基金會(huì)捐贈(zèng)2500萬(wàn)元馳援北京、河北暴雨救災(zāi)

    8月2日消息,今日小米科技創(chuàng)始人雷軍在其微博上發(fā)布消息稱,小米公益基金會(huì)宣布捐贈(zèng)2500萬(wàn)元馳援北京、河北暴雨救災(zāi)。攜手抗災(zāi),京冀安康!以下為公告原文
  • 微軟發(fā)布Windows 11新版 引入全新任務(wù)欄狀態(tài)

    近日,微軟發(fā)布了Windows 11新版,而Build 22563更新主要引入了幾周前曝光的平板模式任務(wù)欄等,系統(tǒng)更流暢了。更新中,Windows 11加入了專門針對(duì)平板優(yōu)化的任務(wù)欄
  • 中關(guān)村論壇11月25日開幕,15位諾獎(jiǎng)級(jí)大咖將發(fā)表演講

    11月18日,記者從2022中關(guān)村論壇新聞發(fā)布會(huì)上獲悉,中關(guān)村論壇將于11月25至30日在京舉行。本屆中關(guān)村論壇由科學(xué)技術(shù)部、國(guó)家發(fā)展改革委、工業(yè)和信息化部、國(guó)務(wù)
Top