1.什麼是模組: 模組就是一系列功能的結合體
3.模組的四種表現形式:(1) 使用python編寫的py檔案
(2) 已被編譯為共享庫或dll的c或c++擴充套件
(3) 把一系列模組組織到一起的資料夾
(4) 使用c編寫並連線到python直譯器的內建模組
4.為什麼要用模組:(1) 用別人寫好的模組(內建的,第三方的):典型的拿來主義,極大的提高開發效率
(2) 使用自己寫的模組(自定義的):當多個檔案中都需要使用相同的方法的時候 可以將該公共的方法寫到乙個py檔案中,其他的檔案以模組的形式導過去直接呼叫即可
5.模組的使用:一定要區分哪個是執行檔案那個是被匯入檔案
1:import 使用語法 imort + 模組名,使用模組裡的名字或方法時需要 模組名.變數(函式),通常匯入模組的句式會在檔案開頭
import os #匯入內建os模組
print(os.path.dirname(__file__)) #
列印當前檔案位置
建立a11.py檔案
print('正在匯入a11')defmy_sort(iterable):
res =
for i in
iterable:
for y,j in
enumerate(res):
if i >j:
res.insert(y,i)
break
else
:
return
resname = '
小明'
import a11 #匯入自定義a11模組,也就是a11.py檔案
print(a11.my_sort([1,23,545,674,324,21])) #
呼叫a11中的my_sort函式
2.匯入名字複雜的模組時候取別名:例: 將a11檔名改為ttttttttttttttttttt.py
import ttttttttttttttttttt as f #匯入自定義ttttttttttttttttttt模組並通過as起乙個簡單的別名
print(f.name) #
可以通過別名來使用模組,相當於ttttttttttttttttttt.name
3.匯入模組時內部的步驟: 在run.py程式中匯入a11模組
右鍵執行run.py檔案首先會建立乙個run.py的命名空間
在第一次匯入模組時 會先執行a11.py檔案
執行a11.py檔案中的**將產生的名字與值存放到a11.py命名空間中
run.py檔案產生乙個指向a11.py命名空間的命名空間
4.注意:多次匯入不會再執行模組檔案,會沿用第一次匯入的成果,也就是只有第一匯入會執行模組裡面的**
5.import特點: 指名道姓的訪問模組中的名字,永遠不會與執行檔案中的名字衝突
1:方法:
from a11 import my_sort #只匯入a11模組的my_sort方法
print(my_sort([1,24,5,67,344,22])) #
使用時不需要通過模組名.名字方法訪問,
print(name) #
name沒有匯入所以不能使用.會報錯
from a11 import * #匯入a11模組中的所有方法,不推薦使用
print(my_sort([1,24,5,67,344,22])) #
使用時不需要通過模組名.名字方法訪問,
print(name) #
可以使用
2.名字衝突
from a11 import name #只匯入a11模組的my_sort方法
name = '
xiaohong
'print(name) #
xiaohong 由於在內部又定義了乙個變數name,將指向匯入模組中name的指標重新指向新定義的name
3.匯入模組時內部的步驟: 在run.py程式中匯入a11模組
右鍵執行run.py檔案首先會建立乙個run.py的命名空間
在第一次匯入模組時 會先執行a11.py檔案
執行a11.py檔案中的**將產生的名字與值存放到a11.py命名空間中
直接拿到指向模組a11.py命名空間中某個值的名字
4.特點:訪問模組中的名字不需要加模組名字首,但可能會與當前執行檔案中的名字衝突
5.__all__ 方法:可以限制匯入者拿到名字的個數
1: 如果在匯入模組出現迴圈匯入問題一定時程式設計不合理,迴圈匯入問題應該在程式設計階段就避免
2解決方法:
(1) 將迴圈匯入語句的句子解除安裝檔案的最下方
(2) 在函式內部匯入模組
1:__name__:(1): 當檔案被當做執行檔案執行的時候__name__列印的結果是__main__
(2): 當檔案被當做模組匯入的時候__name__列印的結果是模組名(沒有字尾)
2 :當我們在寫完功能後測試的**不希望被匯入時執行時可以使用__name__方法判斷
print('正在匯入a11')
defmy_sort(iterable):
res =
for i in
iterable:
for y,j in
enumerate(res):
if i >j:
res.insert(y,i)
break
else
:
return
resname = '小明'
if__name__ == "
__main__
": #
快捷鍵 main 加tab
print(my_sort([1,223,332,4,24,6]))
1:先從記憶體中找
2:內建中找
3: path中找
絕對匯入: 必須依據執行檔案所在的資料夾路徑為基準,無論在執行檔案還時被匯入檔案中都適用
相對匯入: 不能在執行檔案中使用, .代表當前路徑 .. 代表上一級路徑 ...代表上上級路徑
1. bin 存放的是啟動檔案 (start.py) 通常放在專案根目錄或bin資料夾
2. conf 存放一些常量,配置資訊 (settings.py)
3. core 存放整個專案的核心邏輯 (src.py)
4.db 資料庫相關 (userinfo.txt)
5. lib 存放一些公用方法(common.py)
6.log 存放日誌(操作記錄) (talk.log)
7.readme.txt 使用說明
8 start.py檔案內容
import os #匯入os模組
import sys #
匯入sys模組
base_dir = os.path.dirname(os.path.dirname(__file__)) #
獲取軟體安裝的目錄路徑(當start.py在bin目錄下)
#base_dir = os.path.dirname(__file__) # 當start.py在專案根目錄下
將使用者安裝路徑新增到path中
from core import src #
從core資料夾匯入src模組
if__name__ == '
__main__':
src.run()
#執行啟動檔案
規範目錄,常用模組之日誌模組
1.規範目錄結構 logging time random os logging 日誌模組 什麼是日誌 就是生活中的日記 用於記錄什麼時間發生了什麼事情 為什麼要記 就是為了在以後記錄程式出現問題的時候,能夠通過日誌來找到問題的原因 怎麼記日誌 可以自己實現 當然有功能更強大的logging模組 im...
規範目錄結構,常用模組之日誌模組
1.規範目錄結構 bin 存放執行檔案 conf 存放配置檔案 core 核心業務邏輯 db 存放資料處理相關 lib 公共 和第三方的模組 log 日誌 readme 是乙個文字檔案,用於描述應用程式 1.使用規範目錄結構的好處 是專案結構更清晰 提高可讀性 規範目錄結構不是固定,可以根據實際需求...
Python模組的匯入以及軟體開發規範
1 當指令碼直接使用,直接當指令碼執行呼叫即可 def func print from func1 func 2 當做模組被匯入使用,但是又想測試當前指令碼是否能正常執行就是用ifname main def func print from func1 if name main func 我們在建立包...