關於JavaScript輪播圖的實現
阿新 • • 發佈:2021-11-21
軟體開發目錄規範
軟體開發的目錄規範:
為了提高程式的可讀性與可維護性,我們應該為軟體設計良好的目錄結構,這與規範的編碼風格同等重要。軟體的目錄規範並無硬性標準,只要清晰可讀即可,假設你的軟體名為foo,筆者推薦目錄結構如下
Foo/ |-- core/ | |-- core.py | |-- api/ | |-- api.py | |-- db/ | |-- db_handle.py | |-- lib/ | |-- common.py | |-- conf/ | |-- settings.py | |-- run.py |-- setup.py |-- requirements.txt |-- README
解釋一下:
• core/: 存放業務邏輯相關程式碼
• api/: 存放介面檔案,介面主要用於為業務邏輯提供資料操作。
• db/: 存放操作資料庫相關檔案,主要用於與資料庫互動
• lib/: 存放程式中常用的自定義模組
• conf/: 存放配置檔案
• run.py: 程式的啟動檔案,一般放在專案的根目錄下,因為在執行時會預設將執行檔案所在的資料夾作為sys.path的第一個路徑,這樣就省去了處理環境變數的步驟
• setup.py: 安裝、部署、打包的指令碼。
• requirements.txt: 存放軟體依賴的外部Python包列表。
• README: 專案說明檔案。
除此之外,有一些方案給出了更加多的內容,比如LICENSE.txt,ChangeLog.txt檔案等,主要是在專案需要開源時才會用到,請讀者自行查閱。
關於README的內容,這個應該是每個專案都應該有的一個檔案,目的是能簡要描述該專案的資訊,讓讀者快速瞭解這個專案。它需要說明以下幾個事項:
1、軟體定位,軟體的基本功能; 2、執行程式碼的方法: 安裝環境、啟動命令等; 3、簡要的使用說明; 4、程式碼目錄結構說明,更詳細點可以說明軟體的基本原理; 5、常見問題說明。
舉例說明:資料準備如下
# src.py存放原始碼 # encoding=utf-8 # auther:lsj def exit(): print("退出功能") def login(): print("登入功能") def register(): print('註冊功能') def witdraw(): print('體現功能') def transfer(): print("轉賬功能") func_dic={ '0':['退出',exit], '1':['登入',login], '2':['註冊',register], '3':['體現',witdraw], '4':['轉賬',transfer], } def run(): while True: for k in func_dic: print(k,func_dic[k][0]) choice = input("請輸入指令編號:").strip() if choice in func_dic: func_dic[choice][1]() else: print("請重新輸入") # run()
# start.py存放執行程式 # encoding=utf-8 # auther:lsj # 使用相對匯入:參照當前所在資料夾 # from ..core.src import run # run() # ImportError: attempted relative import with no known parent package # 執行檔案超出了查詢範圍。 # 應該採用絕對匯入-->sys.path-->執行檔案 # import sys # sys.path.append(r'D:\pycharm\oldboy_29\day021\ATM\core') # import src # src.run() # 考慮問題:我們目前把路徑寫死了 # import sys # sys.path.append(r'D:\pycharm\oldboy_29\day021\ATM\core') # sys.path.append(r'D:\pycharm\oldboy_29\day021\ATM\lib') # sys.path.append(r'D:\pycharm\oldboy_29\day021\ATM\db') # sys.path.append(r'D:\pycharm\oldboy_29\day021\ATM\conf') # # import src # src.run() # 檢視路徑都是重複的,我們進行優化:把環境的頂級目錄加入到環境變數 # import sys # sys.path.append(r'D:\pycharm\oldboy_29\day021\ATM') # from conf import settings # from core import src # from db import db_handle # from lib import common # print(settings) # print(src) # <module 'conf.settings' from 'D:\\pycharm\\oldboy_29\\day021\\ATM\\conf\\settings.py'> # <module 'core.src' from 'D:\\pycharm\\oldboy_29\\day021\\ATM\\core\\src.py'> # from core import src # src.run() # 不加任何字首直接執行run(),優化如下 # from core.src import run # run() # 優化一 # import sys # print(__file__) # 獲取當前檔案的絕對路徑:執行結果D:/pycharm/oldboy_29/day021/ATM/bin/start.py # # sys.path.append(r'D:\pycharm\oldboy_29\day021\ATM') import os # print(__file__) # 獲取當前檔案的絕對路徑,D:/pycharm/oldboy_29/day021/ATM/bin/start.py # print(os.path.dirname(__file__)) # 獲取當前檔案的絕對路徑的上一個檔案,D:/pycharm/oldboy_29/day021/ATM/bin # print(os.path.dirname(os.path.dirname(__file__))) # D:/pycharm/oldboy_29/day021/ATM # # sys.path.append(r'D:\pycharm\oldboy_29\day021\ATM') # 優化二 import os,sys BASE_DIR = os.path.dirname(os.path.dirname(__file__)) sys.path.append(BASE_DIR) from core import src src.run() """執行結果如下 0 退出 1 登入 2 註冊 3 體現 4 轉賬 請輸入指令編號: """
# commonpy檔案的程式碼 import time from conf import settings def logger(msg): # 日誌記錄功能 with open(settings.LOG_PATH, mode='at', encoding='utf-8' ) as f: f.write('%s %s\n'%(time.strftime('%Y-%m-%d %H:%M:%S'),msg)) # 日誌路徑不能寫死,你要給使用者選擇自定義的儲存位置,去settings裡面設定
# settings.py檔案 from core import src # 這裡的路徑寫死了,我們優化一下 # LOG_PATH = r'D:\pycharm\oldboy_29\day021\ATM\log\user.log' import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) LOG_PATH = r'%s/log/user.log' %BASE_DIR