Python基礎day23:絕對導入和相對導入、模塊化編程簡介、軟體開發目錄規範、常見內置模塊collections和time

来源:https://www.cnblogs.com/amor815/archive/2022/07/14/16478578.html
-Advertisement-
Play Games

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)

6.作業(將員工管理系統用模塊化編程,結合軟體開發目錄規範來封裝)

image


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JavaScript進階知識點——函數和對象詳解 我們在上期內容中學習了JavaScript的基本知識點,今天讓我們更加深入地瞭解JavaScript JavaScript函數 JavaScript函數和Java函數是有一部分相似的,所以學習起來也會相對簡單 基本構造 1.直接構造 //functi ...
  • 當前工作區內的文件如下 首先當然是安裝 yarn,此命令可在任何地方執行 npm install -g yarn 查看版本,會發現版本並不是 3.因為版本 1 是經典版 升級 yarn,此命令在你的工作區根目錄運行 註意:這個升級操作不會影響你的其他項目 yarn set version berry ...
  • 剛學習完Java SE,不知道怎麼寫項目?不知道寫什麼項目?本篇文章將線上ATM詳細架構設計分享出來,幫助初學者開發項目。 ...
  • 原文鏈接:全網最新的nacos 2.1.0集群多節點部署教程-語雀 基本信息 進度整理中 版本 2.1.0 版本發佈日期 2022-04-29 git revision number b584531331cc95054964ba4e33984f4cab9e582d 編寫日期 2022-07-04~ ...
  • 苦惱於Python運行時感人的速度,我決定學習C++。 為了激勵我自己好好地學習這門未曾謀面的編程語言,我決定在此開設專欄:C++學習日記。希望在讀者們的監督下,我可以早日掌握這門語言。當然,如果那位大佬願意賜教,在下也是感激不盡。 2022年7月14日 由於懶得安裝編譯環境,我找了一個線上編程的網 ...
  • 面向對象編程(基礎) 類與對象 ●使用現有技術解決 張老太養了兩隻貓貓:一隻名字叫小白,今年3歲,白色。還有一隻叫小花,今年100歲,花色。請編寫一個程式,當用戶輸入小貓的名字時,就顯示該貓的名字,年齡,顏色。如果用戶輸入的小貓名錯誤,則顯示張老太沒有這隻貓貓。 1)單獨的定義變數解決 2)使用數組 ...
  • MyDisruptor V5版本介紹 在v4版本的MyDisruptor實現多線程生產者後。按照計劃,v5版本的MyDisruptor需要支持更便於用戶使用的DSL風格的API。 由於該文屬於系列博客的一部分,需要先對之前的博客內容有所瞭解才能更好地理解本篇博客 v1版本博客:從零開始實現lmax- ...
  • 為了在命令行程式中實現和用戶的交互,我們編寫的程式的運行過程中往往涉及到對標準輸入/輸出流的多次讀寫。 在C語言中接受用戶輸入這一塊,有著一個老生常談的問題:“怎麼樣及時清空輸入流中的數據?” 這也是這篇小筆記的主題內容。 先從緩衝區說起。 緩衝區是記憶體中劃分出來的一部分。通常來說,緩衝區類型有三種 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...