模块简介/模块的导入/模块的查找顺序/绝对导入和相对导入/软件开发目录规范...
一.模塊的簡介
什么是模塊:
模塊就是一系列功能的結合體
模塊的三種來源:
1.內置的
2.第三方的
3.自定義的
模塊的四種表現形式:
1.使用python編寫的py文件(也就意味著py文件也可以稱之為模塊:一個py文件也可以稱之為一個模塊)(***)
2.已被編譯為共享庫或DLL的C或C++擴展(了解)
3.把一系列模塊組織到一起的文件夾(文件夾下有一個__init__.py文件,該文件夾稱之為包)(***)
? ?包:一系列py文件的結合體
4.使用C編寫并連接到python解釋器的內置模塊
為什么要使用模塊:
1.用別人的模塊可以加快開發效率(內置/第三方)
2.使用自定義模塊,在一個項目中可能會多次使用,這樣可以將其放在項目文件夾lib中,將其放在common.py文件中,當別的地方需要時可直接調用
ps:在調用文件的過程中一定要區分哪個是執行文件,哪個是被導入文件
雙下name方法:在執行文件中__name__=__main__,多用在執行文件中,對執行文件進行測試如:
if __name__ == '__main__': # 快捷寫法,在pycharm中輸入main然后tab鍵index1()index2()?
如果文件是被當作模塊導入的__name__輸出為模塊名(不加后綴)
?
二.模塊導入的兩種方式
2.1.導入兩種方式:
1.import+模塊名
右鍵運行執行文件發生的事(run.py):
1.首先會創建一個run.py的名稱空間
2.首次導入模塊(mk.py)
3.運行mk.py模塊
4.將mk.py在運行中產生的名字和值存放在mk.py的名稱空間中
5.在執行文件run.py中拿到一個指向mk.py名稱空間的名字
?
ps:1.首次導入模塊會創建名稱空間,但是之后再次導入該模塊,該模塊的名稱空間已存在,不會創建新的名稱空間了,會沿用第一次導入的結果
? ? ?2.當幾個模塊有相同的部分或者屬于同一個模塊時可以使用以下句式(不推薦)
mport+模塊名1,模塊名2,模塊名3....當幾個模塊沒有聯系的情況下應該分多次導入
import+模塊名1 import+模塊名2 ...?
3.當模塊的名字很長時,可以給模塊取一個別名,如下:這樣在在訪問模塊名稱空間下的名字就可以寫成kx.名字
import wohaokuaixina as kx使用import打入模塊,訪問模塊下名稱空間的名字同意句式:模塊名.名字
特點:1.指名道姓的訪問模塊中的名字,永遠不會與執行文件中的名字沖突
2.訪問模塊中的名字必須嚴格按照句式模塊名.名字
2.from...import....
右鍵運行執行文件發生的事(run.py):
1.首先會創建一個run.py的名稱空間
2.首次導入模塊(mk.py)
3.運行mk.py模塊
4.將mk.py在運行中產生的名字和值存放在mk.py的名稱空間中
5.在執行文件run.py中拿到一個指向mk.py名稱空間中某個值的名字
?
ps:1.在使用from...import...句式訪問模塊中的名字不需要加模塊名前綴,但是在訪問模塊中名字可能會產生沖突
? 2.可以使用from 模塊名 import *的句式將模塊中的名字一次性全加載出來(不推薦)
? 在這種方式里存在一個方法為__all__,在__all__=[],在列表中可以添加我們需要的名字,這樣通過from 模塊名 import *讀到的名字就是咧白哦種的名字,這樣可以限制導入者拿到的名字個數
三.解決文件循環導入的方法
3.1循環導入案例:
運行文件run.py
import mi m1.f1()模塊m1.py
print('正在導入m1') from m2 import y # 首次導入m2 x = 'm1'模塊m2.py
print('正在導入m2') from m1 import x # 第二次導m1 y = 'm2'當運行run.py文件時,名稱空間內入下圖所示
3.2解決循環導入的方法一:將循環導入的語句寫在最下方
#m1.py模塊print('正在導入m1') x = 'm1' from m2 import y #m2.py模塊print('正在導入m2') y = 'm2' from m1 import x
3.3解決循環導入的方法二:函數內導入模塊
#m1.py模塊print('正在導入m1') def f1():from m2 import y,f2print('m1.f1>>>y:',y)f2() x = 'm1'#m2.py模塊print('正在導入m2') def f2():from m1 import xprint('m2.f2>>>x:',x) y = 'm2'ps:如果在程序中出現循環導入問題,應該想辦法取消循環,這應該在程序設計階段就要避免,實在不行再用此種方式取解決
四.模塊的查找順序
4.1查找順序:
1.內存
2.內置
3.sys.path(相當于環境變量)
ps:sys.path就相當于一個大列表列表中放了一大推文件路徑,第一個文件路徑就是執行文件所在的文件夾
五.模塊的絕對導入,相對導入
絕對導入:絕對導入必須根據執行文件所在的文件夾路徑為準,絕對導入無論在執行文件還是被導入文件都可以使用
相對導入:在相對導入中'.'代表當前路徑,'..'代表上一級路徑,'...'代表上上級路徑.相對導入只能在被導入模塊中使用,在使用相對導入時不需要考慮執行文件是誰,只需要考慮模塊間的路徑關系
六.軟件目錄目錄規范
項目根目錄:
1.啟動文件夾(bin)--------------start.py文件
ps:啟動文件也可以直接放在項目根目錄下
2.配置文件夾(conf)[不經常改變的變量,IP,PORT,DATABASE]--------------setting.py文件
3.公共功能文件(lib)[其他文件可能要用到的功能]--------------common.py文件
? 4.核心邏輯文件夾(core)--------------src.py文件
? 5.日志文件夾(log)--------------log.log日志文件
6.數據庫文件夾(db)
7.readme文本文件(對軟件的介紹)
?
?
?
轉載于:https://www.cnblogs.com/z929chongzi/p/11197347.html
總結
以上是生活随笔為你收集整理的模块简介/模块的导入/模块的查找顺序/绝对导入和相对导入/软件开发目录规范...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis 集群_主从复制_哨兵模型
- 下一篇: 快对app怎么删除浏览记录