日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

7.16模块及软件开发目录规范

發(fā)布時(shí)間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7.16模块及软件开发目录规范 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

模塊

1.什么是模塊?

  就是一系列功能的結(jié)合體

2.模塊的三種來源

  (1)內(nèi)置的(python解釋器自帶)

  (2)第三方的(別人寫的)

  (3)自定義的(你自己寫的)

3.模塊的四種表現(xiàn)

  (1)使用python編寫的py文件(也就意味著py文件也可以稱之為模塊:一個(gè)py文件也可以稱之為一個(gè)模塊)

  (2)已被編譯為共享庫或DLL的C或C++擴(kuò)展(了解)

  (3)把一系列模塊組織到一起的文件夾(文件夾下有一個(gè)__init__.py文件,該文件夾稱之為包)

      包:一系列py文件的結(jié)合體

  (4)使用C編寫并連接到python解釋器的內(nèi)置模塊

4.為什么要用模塊

  (1)用別人寫好的模塊(內(nèi)置的,第三方的):典型的拿來主義,能夠極大的提高開發(fā)效率

  (2)使用自己寫的模塊(自定義的):當(dāng)程序比較龐大的時(shí)候,你的項(xiàng)目不可能只在一個(gè)py中,那么當(dāng)多個(gè)文件中都需要使用相同的方法的時(shí)候,可以將該公共的方法寫到一個(gè)py文件中,其他的文件以模塊的形式導(dǎo)過去直接調(diào)用該方法即可

5.使用模塊一定要注意的點(diǎn)

  一定要區(qū)分哪個(gè)是執(zhí)行文件,哪個(gè)是被導(dǎo)入的文件

import導(dǎo)入模塊

import md # md是需要導(dǎo)入的py文件(模塊)

1.導(dǎo)入模塊后運(yùn)行會發(fā)生什么

  如果被導(dǎo)入的模塊文件名為md.py,執(zhí)行導(dǎo)入操作的文件是run.py

右鍵運(yùn)行run.py,文件首先會創(chuàng)建一個(gè)run.py的名稱空間

  第一種,首次導(dǎo)入模塊的情況:

    (1)運(yùn)行md.py這個(gè)文件

    (2)運(yùn)行md.py文件中的代碼將產(chǎn)生的名字與值存放到md.py名稱空間中

    (3)在執(zhí)行文件(run.py)中,產(chǎn)生一個(gè)指向名稱空間的名字(md)

  第二種,多次導(dǎo)入同一個(gè)模塊的情況:

    多次導(dǎo)入不會再執(zhí)行模塊文件,會沿用第一次導(dǎo)入的成果

2.如何訪問模塊中的名字指向的值 

# 如果md模塊中有變量為 money = 1000 import md # 使用import導(dǎo)入模塊 print(md.money) # 訪問模塊名稱空間中的名字的統(tǒng)一句勢為:模塊名.名字

使用import導(dǎo)入模塊,訪問模塊名稱空間中的名字的統(tǒng)一句勢為:模塊名.名字

  (1)指名道姓的訪問模塊中的名字,永遠(yuǎn)不會與執(zhí)行文件中的名字沖突

  (2)你如果想訪問模塊中名字,必須用模塊名.名字的方式

3.import還可以同時(shí)調(diào)用幾個(gè)模塊

import md,os,time # python支持一行導(dǎo)入多個(gè)模塊

python支持一行導(dǎo)入多個(gè)模塊,但是不推薦使用,因?yàn)檫@樣結(jié)構(gòu)不清晰,只有當(dāng)幾個(gè)模塊有相同部分或者屬于同一個(gè)模塊,可以使用上面的方法

當(dāng)幾個(gè)模塊沒有聯(lián)系的情況下,應(yīng)該分多次導(dǎo)入:

import md import os import time

補(bǔ)充:通常導(dǎo)入模塊的句式會寫在文件的開頭

4.當(dāng)模塊名字比較復(fù)雜的情況下可以給該模塊名取別名

# 如果模塊名特別長比較復(fù)雜,可以給該模塊取別名 import mddddddddddddd as m print(m.money)

from...import...導(dǎo)入模塊

?

# 如果md模塊中有變量money、函數(shù)read1、函數(shù)read2... from md import money,read1,read2 from md import money,read1,read2 # 多次導(dǎo)入不會執(zhí)行,會沿用第一次導(dǎo)入的成果

?

1.導(dǎo)入模塊后運(yùn)行會發(fā)生什么

  如果被導(dǎo)入的模塊文件名為md.py,執(zhí)行導(dǎo)入操作的文件是run.py

右鍵運(yùn)行run.py,文件首先會創(chuàng)建一個(gè)run.py的名稱空間

  首次導(dǎo)入模塊的情況:

    (1)運(yùn)行md.py這個(gè)文件

    (2)運(yùn)行md.py文件中的代碼將產(chǎn)生的名字與值存放到md.py名稱空間中

    (3)在執(zhí)行文件(run.py)中,直接拿到指向模塊md.py名稱空間中某個(gè)值的名字

2.from...import...句式的特點(diǎn)

from md import money money = '我是執(zhí)行文件中的money' # 執(zhí)行文件中定義一個(gè)money print(money) # 結(jié)果是:我是執(zhí)行文件中的money # 模塊中money的值會被覆蓋,相當(dāng)于重新賦值了

  (1)訪問模塊中的名字不需要加模塊名前綴

  (2)在訪問模塊中的名字可能會與當(dāng)前執(zhí)行文件中的名字沖突

3.補(bǔ)充

# 如何一次性將md模塊中的名字全部加載過來 from md1 import * print(money) print(read1) print(read2)

為什么*可以將一次性將md模塊中的名字全部加載過來,其實(shí)是拿到__all__中的所有的名字,不寫默認(rèn)所有的,寫了就是寫多少拿多少

__all__可以指定當(dāng)所在py文件被當(dāng)做模塊導(dǎo)入的時(shí)候,可以限制導(dǎo)入者能夠拿到的名字個(gè)數(shù)

循環(huán)導(dǎo)入問題及解決思路

m1模塊:

print('正在導(dǎo)入m1') from m2 import y # 首次導(dǎo)入m2 x = 'm1'

m2模塊:

print('正在導(dǎo)入m2') from m1 import x # 第二次導(dǎo)m1 y = 'm2'

執(zhí)行文件:

from dir1.dir import m1 m1.f1()

  會報(bào)錯(cuò),因?yàn)閤和y都還沒定義

1.如何解決?

(1)方式一:將循環(huán)導(dǎo)入的句式寫在文件最下方

  修改過的m1模塊

print('正在導(dǎo)入m1') x = 'm1' from m2 import y # 首次導(dǎo)入m2

  修改過的m2模塊

print('正在導(dǎo)入m2') y = 'm2' from m1 import x # 第二次導(dǎo)m1

  再運(yùn)行執(zhí)行文件就不會報(bào)錯(cuò)了

from dir1.dir import m1 m1.f1()

(2)方式二:函數(shù)內(nèi)導(dǎo)入模塊

  修改過的m1模塊

print('正在導(dǎo)入m1') def f1():from dir1.dir.m2 import y,f2print('m1.f1>>>y:',y)f2() x = 'm1'

  修改過的m2模塊

print('正在導(dǎo)入m2') def f2():from dir1.dir.m1 import xprint('m2.f2>>>x:',x) y = 'm2'

  再運(yùn)行執(zhí)行文件就不會報(bào)錯(cuò)了

from dir1.dir import m1 m1.f1()

2.但是:

  如果出現(xiàn)循環(huán)導(dǎo)入問題,那么一定是你的程序設(shè)計(jì)的不合理,循環(huán)導(dǎo)入不應(yīng)該出現(xiàn)在程序里面,循環(huán)導(dǎo)入問題應(yīng)該在程序設(shè)計(jì)階段就避免

__name__用法

1.如何使執(zhí)行文件調(diào)用模塊的時(shí)候,不執(zhí)行模塊的代碼

def index1():print('index1')def index2():print('index2') if __name__ == '__main__': # 當(dāng)文件被當(dāng)做執(zhí)行文件執(zhí)行的時(shí)候__name__打印的結(jié)果是__main__ index1() # 所以才執(zhí)行下面的代碼 index2() # 所以才執(zhí)行下面的代碼

  但是當(dāng)文件被當(dāng)做模塊導(dǎo)入的時(shí)候__name__打印的結(jié)果是模塊的名字,而不再是__main__,所以下面的代碼就不會運(yùn)行了

2.快捷寫法

if __name__ == '__main__': # 快捷寫法,只輸入main然后直接tab鍵即可補(bǔ)全

  只輸入main然后直接tab鍵,PyCharm即可幫我們補(bǔ)全

模塊的查找順序

1.模塊的查找順序

  (1)先從內(nèi)存中找

  (2)然后從內(nèi)置中找

  (3)再從sys.path中找(類似于環(huán)境變量)

import sys sys.path.append(r'D:\Python項(xiàng)目\day14\dir1') # 把模塊所在的文件夾路徑添加到環(huán)境變量

  sys是一個(gè)模塊,sys.path返回的是一個(gè)大列表,里面放了一堆文件路徑,第一個(gè)路徑永遠(yuǎn)是執(zhí)行sys.path的這個(gè)文件所在的文件夾的路徑。

  所以使用sys.path的時(shí)候一定要分清楚誰是執(zhí)行文件誰是被導(dǎo)入文件

2.注意:

  py文件名千萬不要與模塊名(內(nèi)置的、第三方)相同,沖突了就說明設(shè)計(jì)不合理

模塊的絕對導(dǎo)入和相對導(dǎo)入

1.絕對導(dǎo)入

form dir import m1 # 文件的絕對路徑

絕對路徑就相當(dāng)于F:\python\day14\代碼\day14\dir1\dir\m1.py,拿著這個(gè)路徑無論在哪都能找到要找的對象

  絕對導(dǎo)入必須依據(jù)執(zhí)行文件所在的文件夾路徑為準(zhǔn),絕對導(dǎo)入無論在執(zhí)行文件中還是被導(dǎo)入文件都適用

2.相對導(dǎo)入

  .?代表的當(dāng)前路徑

  .. 代表的上一級路徑

  ... 代表的是上上一級路徑

  ....?代表的是上上上一級路徑

注意:

  相對導(dǎo)入不能在執(zhí)行文件中使用,只能在被導(dǎo)入的模塊中使用,使用相對導(dǎo)入,就不需要考慮執(zhí)行文件到底是誰,只需要考慮模塊與模塊之間的路徑關(guān)系是什么

軟件開發(fā)目錄規(guī)范

項(xiàng)目根目錄(項(xiàng)目名)

  (1)bin文件夾

    里面放項(xiàng)目啟動(dòng)文件,例如:start.py(啟動(dòng)文件還可以放在根目錄下)

# 啟動(dòng)文件的代碼 import sys import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) # 獲取用戶軟件根目錄的絕對路徑 sys.path.append(BASE_DIR) # 添加到環(huán)境變量中 from core import src if __name__ == '__main__':src.run() # 導(dǎo)入項(xiàng)目的文件并運(yùn)行 # __file__ 獲取當(dāng)前文件所在文件夾的絕對路徑 # os.path.dirname(__file__)獲取當(dāng)前文件所在文件夾往上一層文件夾的絕對路徑  View Code  

  (2)conf文件夾

    里面放項(xiàng)目配置文件,例如:settings.py

  (3)core文件夾

    里面放項(xiàng)目核心邏輯文件,例如:src.py

  (4)db文件夾

    里面放數(shù)據(jù)相關(guān)

  (5)lib文件夾

    里面放項(xiàng)目所用到的公共的功能,例如:common.py

  (6)log文件夾

    里面放項(xiàng)目的日志文件,例如:log.log

  (7)readme文本文件(readme.txt)

    對你這款軟件的介紹,介紹項(xiàng)目

轉(zhuǎn)載于:https://www.cnblogs.com/francis1/p/11197651.html

總結(jié)

以上是生活随笔為你收集整理的7.16模块及软件开发目录规范的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。