day23今日內容概要: 1.絕對導入與相對導入 2.包的概念(package) 3.模塊化編程思想簡介 4.軟體開發目錄規範 5.常見內置函數:collections和time 6.作業(將員工管理系統用模塊化編程,結合軟體開發目錄規範來封裝) 今日內容詳解 1.絕對導入和相對導入 PS:只要存在 ...
day23今日內容概要:
1.絕對導入與相對導入
2.包的概念(package)
3.模塊化編程思想簡介
4.軟體開發目錄規範
5.常見內置函數:collections和time
6.作業(將員工管理系統用模塊化編程,結合軟體開發目錄規範來封裝)
今日內容詳解
1.絕對導入和相對導入
PS:只要存在import導入模塊的操作,那麼sys.path(程式系統環境變數)永遠以當前執行文件的根目錄為參考路徑。
1.1.絕對導入:
句式:from 文件夾名 import py文件名
分析:這裡的文件夾必須包含在當前執行文件的根目錄下,可單層也可多層,
具體多少層路徑需要在from後面採用 ad1.ad2.ad3 的形式註明
1.2.相對導入:
句式:from . import py文件名 或者是 from .. import py文件名
拓展知識:單句點符. 表示當前文件路徑
雙句點符.. 表示當前路徑的上一層路徑
../.. 表示上上層
分析:所以from . import py文件名 表示從關鍵字import所在的文件根目錄下導入一個py文件,
from .. import py文件名 表示從當前文件根目錄的上一層導入一個py文件
總結:相對導入依賴於關鍵字import所在的那個文件根目錄路徑,適合用來模塊之間導入(前提是模塊與模塊在同一個根目錄下),但是當模塊比較多的時候還是容易找不到模塊而報錯。
而絕對導入依賴於當前執行文件的根目錄路徑,更不容易出現找不到模塊而報錯的情況,更加推薦使用絕對導入的方法來導入模塊。
2.包的概念(package)
概念:“包”實際上就是文件夾,只是在文件夾裡面多了一個__init__.py文件,而在這個__init__.py文件裡面你可以配置這個文件夾裡面哪些模塊可以被調用。實際上在Python3裡面對包和文件夾的區別已經不大了。
3.模塊化編程簡介
概念:類似前期將一段具有特定功能的代碼封裝成一個函數,需要的時候直接調用;而模塊化編程就是將更多的代碼或者定義好的函數、變數....封裝成一個模塊,當需要使用模塊裡面的功能時,直接導入這個模塊即可。
4.軟體開發目錄規範
目的:為了方便代碼的管理,項目的維護,調試等,將具有特定功能的文件(.py .TXT .log)分類放進一個指定的文件夾內
4.1規範的目錄框架:
bin ->start.py 存放啟動文件
configure ->setting.py 存放配置文件
core -> src.py 存放項目的核心邏輯代碼文件
library -> common.py 存放各模塊之間通用的文件
database -> user_data.txt 存放項目的資料庫文件
interface -> order.py 存放項目的拓展介面文件
log -> log.txt 存放項目運行的日誌文件
requirement.txt 存放運行該項目所需要具備的條件
readme.txt 存放對該項目的一些功能介紹等等
PS:實際項目開發中並不一定需要完完全全按照這個框架來設置文件目錄,比如當bin文件夾里只有一個start.py文件時,完全可以把start文件拿出來直接放在項目的根目錄下。總之只要能大致按照這個框架最終達到軟體開發目錄規範的目的即可。
5.常見內置模塊
5.1.collections:
1.具名元組 namedtuple
導入:from collections import namedtuple
功能:point = namedtuple('三維坐標', 'x y z')
res = point(1, 2, 3)
print(res) # 三維坐標(x=1, y=2, z=3) 作用就是將數據值賦值給元祖裡面的x,y,z並組成一個元組,同時還為這個元組綁定了一個名字
2.雙端隊列deque(只做瞭解)
from collections import deque
作用:隊列前可以用appendleft(x)來追加數據,隊列後可用.append(x)來追加數據,不同於列表,只能使用.append(x)在後面追加新數據
3.Counter(計數)
from collections import counter
str = 'hhhdbfhhffvbvhbfnfjuenvbfih'
res = Counter(str)
print(res) # Counter({'h': 7, 'f': 6, 'b': 4, 'v': 3, 'n': 2, 'd': 1, 'j': 1, 'u': 1, 'e': 1, 'i': 1}) Counter會統計字元串中每一個字元出現的次數,並生成一個字典
5.2.time(時間模塊):
import time
time.time() 獲取時間戳(從1970年到現在多少秒) # 1657789438.0584188
time.sleep(3) 定時,延時,總之讓程式停止3秒鐘
time.gmtime() 獲取結構化時間(電腦更易讀懂) # time.struct_time(tm_year=2022, tm_mon=7, tm_mday=14, tm_hour=9, tm_min=3, tm_sec=58, tm_wday=3, tm_yday=195, tm_isdst=0)
time.strftime(format) 獲取格式化時間(更方便人查看) # 2022-07-14 17:12:40
PS:格式化時間的獲取方式
res = time.strftime('%Y-%m-%d %H:%M:%S') # 需要給定一個時間格式
res2 = time.strftime('%Y-%m-%d %X') # %X = %H:%M:%S
print(res) # 2022-07-14 17:16:16
print(res2) # 2022-07-14 17:17:09
time.strptime(string, format) # 將給定的格式化時間string,按照給定格式format轉換為結構化時間
eg:res = time.strptime('2022-07-14', '%Y-%m-%d')
print(res) # time.struct_time(tm_year=2022, tm_mon=7, tm_mday=14, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=195, tm_isdst=-1)