模塊與軟件開發目錄架構

1.模塊
"""
什麼是模塊
模塊:就是一系列功能的結合體
模塊的三種來源:
1.內置的(python解釋器自帶)
2.第三方的(別人寫的)
3.自定義的(你本身寫的)
模塊的四種表現形式
1.使用python編寫的py文件(也就意味着py文件也能夠稱之爲模塊:一個py文件也能夠稱之爲一個模塊)
2.已被編譯爲共享庫或DLL的C或C++擴展(瞭解)
3.把一系列模塊組織到一塊兒的文件夾(文件夾下有一個__init__.py文件,該文件夾稱之爲包)
包:一系列py文件的結合體
4.使用C編寫並鏈接到python解釋器的內置模塊

爲何要用模塊
1.用別人寫好的模塊(內置的,第三方的):典型的拿來主義,極大的提升開發效率
2.使用本身寫的模塊(自定義的):當程序比較龐大的時候,你的項目不可能只在一個py中
那麼當多個文件中都須要使用相同的方法的時候 能夠將該公共的方法寫到一個py文件中
其餘的文件以模塊的形式導過去直接調用便可

如何使用模塊
注意(******):必定要區分哪一個是執行文件,哪一個是被導入文件

"""
2.import 導入模塊
import md

"""
右鍵運行run.py文件首先會建立一個run.py的名稱空間
首次導入模塊(md1.py)(******)
1.執行md.py文件
2.運行md.py文件中的代碼將產生的名字與值存放到md.py名稱空間中
3.在執行文件中產生一個指向名稱空間的名字(md)

注意 屢次導入不會再執行模塊文件,會沿用第一次導入的成果(******)
"""
money = 9999


def read1():
print('from run read1')


# 訪問模塊中的名字指向的值
# print(md.money) # 使用import導入模塊 訪問模塊名稱空間中的名字統一句勢:模塊名.名字


"""
1.只要你能拿到函數名 不管在哪均可以經過函數加括號來調用這個函數(會回到函數定義階段 依次執行代碼)
2.函數在定義階段 名字查找就已經固定死了 不會由於調用位置的變化而改變


使用import導入模塊 訪問模塊名稱空間中的名字統一句勢:模塊名.名字
1.指名道姓的訪問模塊中的名字 永遠不會與執行文件中的名字衝突
2.你若是想訪問模塊中名字 必須用模塊名.名字的方式
"""

"""
只要當幾個模塊有相同部分或者屬於用一個模塊,可使用上面的方法
當幾個模塊沒有聯繫的狀況下 應該分屢次導入
import os
import time
import md
ps:一般導入模塊的句式會寫在文件的開頭
"""

"""
當模塊名字比較複雜的狀況下 能夠給該模塊名取別名
"""

"""
異常有兩大類
1.語法結構錯誤:須要你當場修改 異常捕獲無法完成
2.邏輯錯誤:異常捕獲能夠處理
"""

3.from...import...形式

# from md1 import money,read1,read2,change
# from md1 import money # 屢次導入不會執行 會沿用第一次導入的成果

"""
會先建立run1.py的名稱空間
首次導入md1.py模塊
1.運行md1.py
2.將產生的名字存放到md1.py名稱空間中
3.直接拿到指向模塊md1.py名稱空間中某個值的名字


利用from...import...句式
缺點:
1.訪問模塊中的名字不須要加模塊名前綴
2.在訪問模塊中的名字可能會與當前執行文件中的名字衝突
"""
# def read1():
# print('run1.py')
# read1()

# 補充
from md1 import * # 一次性將md1模塊中的名字所有加載過來 不推薦使用 而且你根本不知道到底有哪些名字能夠用

print(money)
print(read1)
print(read2)
print(change)

"""
__all__能夠指定當所在py文件被當作模塊導入的時候
能夠限制導入者可以拿到的名字個數
__all__存在於導入文件中
"""

4.循環導入問題的解決思路
"""
若是出現循環導入問題 那麼必定是你的程序設計的不合理
注意 循環導入問題應該在程序設計階段就應該 避免

解決循環導入問題的方式
1.方式1
將循環導入的句式寫在文件最下方()

2.方式2
函數內導入模塊
"""
5.__name__的用法
def index1():
print('index1')

def index2():
print('index2')


# print(__name__)
# 當文件被當作執行文件執行的時候__name__打印的結果是__main__
# 當文件被當作模塊導入的時候__name__打印的結果是模塊名(沒有後綴)
# if __name__ == '__main__':
# index1()
# index2()

# 此方法存在執行文件末尾,做用:讓導入模塊後的文件中不執行上述函數,用來測試正在執行的模塊文件結果

# if __name__ == '__main__': # 快捷寫法 main直接tab鍵便可
# index1()
# index2()

6.模塊查找順序
"""
模塊的查找順序
1.先從內存中找
2.內置中找
3.sys.path中找(環境變量):
必定要分清楚誰是執行文件誰是被導入文件(******)

是一個大列表,裏面放了一對文件路徑,第一個路徑永遠是執行文件所在的文件夾(同級)
"""
# import time
# import md
# time.sleep(20)
# md.f1() # 20s內刪除md模塊文件後依舊會出結果,由於結果存在於內存中


# """
# 注意py文件名不該該與模塊名(內置的,第三方)衝突 (從新爲變量賦值會覆蓋原來的值)
# """
# from dir1.dir import md
import sys #路徑模塊
sys.path.append(r'D:\Python項目\day14\dir1')
# print(sys.path) ### 添加路徑

from dir import md

7.絕對路徑和相對路徑
"""
絕對導入必須依據執行文件所在的文件夾路徑爲準
1.絕對導入不管在執行文件中仍是被導入文件都適用


相對導入
.表明的當前路徑
..表明的上一級路徑
...表明的是上上一級路徑

注意相對導入不能再執行文件中使用
相對導入只能在被導入的模塊中使用,使用相對導入 就不須要考慮
執行文件究竟是誰 只須要知道模塊與模塊之間路徑關係
"""

8.軟件開發目錄
#bin conf core db lib log 文件的意義 以及字目錄一些文件的意義

# 起始文件

import sys # 靜態路徑 只能與本身的電腦交互
import os # 動態路徑

BASE_DIR = os.path.dirname(os.path.dirname(__file__)) # 動態添加路徑,os可以使其與用戶交互
sys.path.append(BASE_DIR)
"""
pycharm會自動將你新建的最頂層的目錄自動添加到環境變量中
上面這兩句話 不是針對你的 是針對下載你這個軟件的用戶
"""
from core import src

if __name__ == '__main__': # 測試 防範被導入的文件自動運行執行文件中的代碼
src.run()

# 1.將core文件路徑添加到system path中   ...太low# 2.將ATM文件夾添加到system path中
相關文章
相關標籤/搜索