Python 模塊化編程全解析:模塊、包與第三方庫管理指南

模塊與包

模塊化編程是什么?用生活例子秒懂

想象你在搭樂高積木:

  • 每個小積木塊都有特定功能(比如輪子、窗戶、墻壁)—— 這就像模塊(一個.py 文件,封裝了函數或類)。
  • 把相關的積木塊裝進一個盒子里,方便分類和取用 —— 這就像(一個文件夾,里面裝多個模塊和子包,帶__init__.py 標識)。

模塊化編程的核心思想是:把復雜代碼拆成小而獨立的 "積木",需要時直接拿來用,不用重復造輪子

1.模塊的概念

? ? ? ? 模塊就是一個.py為后綴的python文件,可以被其它Python程序導入和使用,也可以自己獨立運行,里面存放著的是一組相關函數或者類。

1.1模塊的導入

? ? ? ? 模塊的導入使用import關鍵字,配合from和as有以下幾種用法:

導入方式語法示例適用場景
導入整個模塊import math需要用模塊里的多個功能,用模塊名.功能調用
導入模塊并取別名import numpy as np模塊名太長(如 numpy→np),簡化代碼
導入模塊中的特定功能from os import getcwd只需要模塊里的 1-2 個功能,避免代碼冗余
導入特定功能并取別名from datetime import datetime as dt功能名太長或避免沖突
導入模塊中所有功能from random import *

? ? ? ? import會把整個文件都導入進來,而使用from后可以只導入某一個模塊,節省空間

示例

# 1. 導入整個模塊
import math
print(math.sqrt(16))  # 用模塊名.功能調用 → 4.0# 2. 別名簡化
import pandas as pd  # 約定俗成的別名,大家都這么用
df = pd.DataFrame({"name": ["Alice"]})  # 用別名調用# 3. 導入特定功能
from os import getcwd, chdir
print(getcwd())  # 直接用功能名 → 輸出當前目錄# 4. 功能取別名
from datetime import datetime as dt
print(dt.now())  # 用別名調用 → 輸出當前時間# 5. 導入所有功能(謹慎使用)
from random import *
print(randint(1, 10))  # 直接用函數名 → 隨機1-10的整數

1.2模塊的作用

  • 令Python代碼的編寫不必從零開始,不要重復寫‘造輪子’的過程。
  • 避免同意模塊內的命令沖突
  • 方便代碼的管理與維護,提高代碼的可讀性

1.3模塊的分類:內置、第三方、自定義

1.3.1內置模塊(系統模塊)

????????Python解釋器自帶的標準庫模塊,可以直接導入使用,比如 keyword、os等,這些模塊可直接導入而不需要安裝,在所有安裝了Python 解釋器的電腦上都可以運行且每個py文件都會自動導入builtins模塊。

特點

  • 即用即導入:直接import即可使用。

  • 性能高效:通常使用 C 語言實現。

1.3.1.1常見模塊
模塊功能官方文檔
math數學運算math --- 數學函數 — Python 3.12.10 文檔
os操作系統接口os --- Miscellaneous operating system interfaces — Python 3.13.5 文檔
os.path路徑相關os.path --- Common pathname manipulations — Python 3.13.5 文檔
datetime日期和時間datetime --- Basic date and time types — Python 3.13.5 文檔
random隨機數生成random --- Generate pseudo-random numbers — Python 3.13.5 文檔
time時間time --- Time access and conversions — Python 3.13.5 文檔
1.3.1.2方法示例?
  • random模塊:
import random
random.randint(1, 6)  # random.randint(a,b) 生產 a~b的隨機整數
random.randint(1, 6)
random.random()   # random.random  生成包含0 但不包含1 的浮點數
random.choice("ABCD")    # 從一個序列中,隨機返回一個元素
random.choice("ABCD")
L = [1, 2, 3, 6, 9]
random.choice(L)
random.shuffle(L)   # random.shuffer(x)  # 把列表X 打亂
print(L)
  • ?time模塊
import timetime.time()  # 返回當前時間的時間戳
time.ctime()  #返回當前的UTC 時間的字符串
t1 = time.localtime()  # 返回當前的本地時間元組
time.sleep(3)  # 讓程序睡眠 n 秒
time.strftime("%Y-%m-%d", t1)  # 格式化時間
time.strftime("%y-%m-%d", t1)
time.strftime('%Y-%m-%d %H:%M:%S', t1)
  • ?os模塊:
# 1. os.getcwd(): 獲取當前工作目錄
import os
current_directory = os.getcwd()
print("當前工作目錄:", current_directory)# 2. os.chdir(path): 改變當前工作目錄
new_directory = "F:\\01.AI07.深度學習框架\\00.上課課件"
os.chdir(new_directory)
print("工作目錄已更改為:", os.getcwd())# 3. os.listdir(path='.'): 返回指定目錄下的所有文件和目錄列表
directory_path = "."
files_and_dirs = os.listdir(directory_path)
print("指定目錄下的文件和目錄列表:", files_and_dirs)# 4. os.mkdir(path): 創建目錄
new_directory = "new_folder"
os.mkdir(new_directory)
print(f"目錄 '{new_directory}' 已創建")# 5. os.rmdir(path): 刪除目錄
directory_to_remove = "new_folder"
os.rmdir(directory_to_remove)
print(f"目錄 '{directory_to_remove}' 已刪除")# 6. os.remove(path): 刪除文件
file_to_remove = "example.txt"
os.remove(file_to_remove)
print(f"文件 '{file_to_remove}' 已刪除")

1.3.2第三方模塊

????????由其他開發者開發且需要通過包管理工具(pip)安裝的模塊,比如Numpy、Pandas等庫,如果有代碼需要放到別的電腦上運行,那么這個電腦也需要先安裝用到的第三方庫才可以正常運行。
1.3.2.1常見模塊?
模塊功能示例
numpy數值計算科學運算、矩陣操作
pandas數據分析數據清洗與處理
matplotlib數據可視化繪制圖表
requestsHTTP請求處理爬取網頁內容,調用API
flaskWeb應用框架快速搭建Web服務
1.3.2.2使用示例?

安裝更新與卸載

安裝
pip install??numpy? pandas requests
更新
pip install?numpy? pandas requests
卸載
pip uninstall??numpy? pandas requests

使用

  • numpy 模塊
import numpy as np
array = np.array([1, 2, 3])
print(array.mean())  # 輸出: 平均值 2.0
  • pandas 模塊
import pandas as pd
df = pd.DataFrame({"Name": ["Alice", "Bob"], "Age": [25, 30]})
print(df)
  • ?requests 模塊:用requests爬取網頁內容
import requests# 發送請求獲取網頁內容
response = requests.get("https://api.github.com")  # 調用GitHub開放API# 打印結果(JSON格式)
print(response.json())  # 輸出:GitHub API的返回數據(字典形式)

1.3.3自定義模塊

????????用戶根據需求自己編寫的.py文件。

1.3.3.1創建模塊

????????創建一個myutils.py文件:

# utils.py
def add(a, b):return a + bdef greet(name):return f"Hello, {name}!"
1.3.3.2 使用模塊

????????創建一個main.py文件,并導入自定義模塊:

# main.py
import myutilsprint(myutils.add(3, 5))  # 輸出: 8
print(myutils.greet("Alice"))  # 輸出: Hello, Alice!
1.3.3.3 跨文件夾使用

????????在main.py中:

'''
假設目錄結構如下:
project/utils/__init__.pymath_utils.pymain.py
'''
from utils.math_utils import addprint(add(3, 5))  # 輸出: 8

?

1.4模塊內置變量

????????可通過dir()查看模塊的內置變量:
  • __name__:用于確定模塊是被直接運行還是被導入到其他模塊中。當一個模 塊被直接運行時,__name__的值是”__main__”,否則為模塊的名稱。
  • __doc__:包含模塊的說明性文檔。
  • __file__:包含模塊的文件路徑。
  • __all__:定義一個模塊中的哪些變量、函數或類可以通過from module import *導入時可以用。
  • __package__:包含模塊所在的包的名稱。
  • __dict__:包含模塊的全局命名空間。

2.包的概念

????????就是一個有層次的文件目錄結構,用來更好的組織和管理模塊。通俗的說就 是一個目錄,里面存放python文件和新的包目錄,并且每一個包目錄都需要存在 一個__init__.py文件,__init__.py文件可以沒有內容,但必須有這個文件。
  • 作用:用于組織模塊的集合,形成層次化的結構,便于管理大型項目。

  • 結構:

    my_package/__init__.pymodule1.pymodule2.pysubpackage/__init__.pymodule3.py
????????注意:__init__.py文件在Python3.3版本后其實就不用在創建了,但是為了不同 版本下的代碼兼容,建議還是創建,且PyCharm會自動創建。

2.1__init__.py文件的主要作用:

  • 標識包目錄:告訴Python解釋器該文件所在的目錄應被視為一個包而不是一 個普通的目錄。如果沒有這個文件,可能會無法正常導入包內的模塊。
  • 執行初始化代碼:在該文件中也可以存在代碼,在調用該包里的模塊時,該文 件里的代碼也會被運行。
  • 控制包的導入行為:通過__all__來控制哪些模塊可以被導入,從而限制包的公 開接口,防止不需要的模塊導入。
  • 提供包級別的命名空間:在該文件中定義的變量和函數可以在包的其他模塊中 共享。
  • 批量導入模塊:在該文件中可以批量導入系統模塊或其他模塊。

示例:

# __init__.py 文件示例# 1. 批量導入系統模塊
import os
import sys
import datetime# 2. 定義包級別的變量
package_variable = "This is a package variable"# 3. 控制包的導入行為
__all__ = ['module1', 'module2']# 4. 執行初始化代碼
print("Initializing mypackage")# 注意:這個代碼會在包被導入時執行# 5. 導入包內的模塊
from . import module1
from . import module2

2.2導入包和子包

  • 使用import關鍵字可以導入包和子包,以訪問其中的模塊和內容。

    # 同模塊的導入規則import 包名 [as 包別名]import  包名.模塊名 [as 模塊新名]import  包名.子包名.模塊名 [as 模塊新名]from 包名 import 模塊名 [as 模塊新名]from 包名.子包名 import 模塊名 [as 模塊新名]from 包名.子包名.模塊名 import 屬性名 [as 屬性新名]# 導入包內的所有子包和模塊from 包名 import *from 包名.模塊名 import *

?示例:

# 導入包中的模塊
import matplotlib.pyplot as plt# 導入子包中的模塊
from sklearn.linear_model import LinearRegression

2.3第三方包的相關操作:

安裝
pip install package-name==version
更新
pip install –upgrade package-name
卸載
pip uninstall package-name

2.4包的創建

????????新建一個Python軟件包,就是創建了一個包,里面自帶__init__.py文 件,只需要將寫好的模塊或包放入進去或直接在里面創建模塊或即可。

3.模塊與包的區別

模塊
一個Python文件一個包含__init__.py的文件夾
提供基本功能單元用于組織多個模塊
文件名為.py目錄名

?

4. 解析順序

????????在使用 import module_name時,Python 會按照特定順序搜索并加載模塊。

4.1 模塊解析順序

查找優先級查找位置說明
1?? 內置 C 擴展模塊sys.builtin_module_namesmath, sys, time, os
2?? sys.modules 緩存sys.modules避免重復加載
3?? 當前目錄os.getcwd()同名文件或目錄
4?? PYTHONPATH 變量sys.path環境變量指定的路徑
5?? Python 標準庫/usr/lib/python3.x/Lib/標準 Python 庫
6?? site-packages(第三方庫)site.getsitepackages()pip install 安裝的模塊
7?? __pycache__/*.pyc__pycache__/預編譯字節碼

?

4.2 內置C擴展模塊

????????最高優先級,Python 直接加載,不查找文件

4.3 sys.modules

????????如果模塊已加載,則直接返回,避免重復導入

import sys
print(sys.modules.keys())  # 查看已加載的模塊

4.4 當前目錄

????????如果 C 擴展模塊中找不到,就查找當前目錄下是否有 module_name.py 或 module_name 目錄

import os
print(os.getcwd())  # 查看當前目錄

4.5 PYTHONPATH

????????如果當前目錄沒有該模塊,則檢查 $PYTHONPATH$ 環境變量中的目錄

import sys
print(sys.path)  # 列出所有可能的搜索路徑sys.path.insert(0, "/custom/path/")  # 添加路徑

4.6 標準庫

如果前面路徑都找不到,會查找標準庫中的模塊。

4.7 第三方模塊

最后,進入 site-packages 目錄查找安裝的第三方模塊。

import site
print(site.getsitepackages())

4.8 __pycache__/

????????從__pycache__/目錄中加載 .pyc 文件,而不是重新解析 .py 文件。

????????你可以刪除 __pycache__/ 讓 Python 重新編譯 .py。

5.總結:模塊化編程的核心價值

????????模塊化編程讓Python代碼從"一團亂麻"變成"井然有序的積木": ?

  • - 代碼復用:寫一次功能,到處調用,不用重復勞動。 ?
  • - 易于維護:模塊獨立,改一處不影響其他部分。 ?
  • - 團隊協作:多人分工寫不同模塊,最后像拼積木一樣組合。 ?

????????記住:學好模塊和包,是從"寫腳本"到"開發項目"的關鍵一步。下次寫代碼時,試試把常用功能拆成模塊——你會發現代碼變得清爽又好維護!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89279.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89279.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89279.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小白學Python,網絡爬蟲篇(2)——selenium庫

前言 selenium 庫是一種用于 Web 應用程序測試的工具,它可以驅動瀏覽器執行特定操作,自動按照腳本代碼做出單擊、輸入、打開、驗證等操作,支持的瀏覽器包括 IE、Firefox、Safari、Chrome、Opera 等。 與 requests 庫不同的是,se…

Java安全:SpringBoot項目中Fastjson組件的使用與安全實踐

前言 Fastjson是阿里巴巴開源的一個高性能Java JSON庫,廣泛用于Java對象的序列化和反序列化操作。在SpringBoot項目中,Fastjson常被用作JSON處理工具。然而,Fastjson因其高性能而廣受歡迎的同時,也因多次爆出的安全漏洞而備受關注…

x的平方根

給你一個非負整數 x ,計算并返回 x 的 算術平方根 。由于返回類型是整數,結果只保留 整數部分 ,小數部分將被 舍去 。注意:不允許使用示例 1:輸入:x 4 輸出:2示例 2:輸入&#xff1…

oracle服務器定時備份Windows Server

-- 創建目錄對象(若未創建),先建立對應文件夾才能用目錄對象CREATE OR REPLACE DIRECTORY dp_dirbackup AS D:\BACKUP; --配置路徑 GRANT READ, WRITE ON DIRECTORY dp_dirbackup TO 用戶名; --配置用戶權限-- 備份腳本(保存為每…

HTML data-* 屬性 自定義屬性

data-* 屬性用于存儲私有頁面后應用的自定義數據。 data-* 屬性可以在所有的 HTML 元素中嵌入數據。 自定義的數據可以讓頁面擁有更好的交互體驗(不需要使用 Ajax 或去服務端查詢數據)。 data-* 屬性由以下兩部分組成:1. 屬性名不要包含大寫字…

Oracle 大頁配置use_large_pages 參數解析

一、前因 再給一位客戶的Exdata 2 節點 RAC 19C版本創建數據庫并配置好優化參數后,客戶一天發來一份健康檢查報告,打開一看 use_large_pages 配置異常。 回想安裝部署時特意確認了在db啟動大頁已經生效,為何會有此異常告警項? 二…

迅為八核高算力RK3576開發板攝像頭實時推理測試 ppyoloe目標檢測

RK3576處理器迅為iTOP-3576開發板采用瑞芯微RK3576高性能、低功耗的應用處理芯片,集成了4個Cortex-A72和4個Cortex-A53核心,以及獨立的NEON協處理器。它適用于ARM PC、邊緣計算、個人移動互聯網設備及其他多媒體產品。NPU高達6TOPS算力支持INT4/INT8/INT…

純CSS輪播

純CSS輪播 在現代網頁設計中,輪播組件是一種常見的用戶界面元素,廣泛應用于展示圖片、產品信息等內容。本文將詳細介紹如何使用純 HTML/CSS 和少量 JavaScript 實現一個功能完備的 CSS Scroll Snap 輪播組件。該組件不僅支持原生左右拖拽滾動&#xff0c…

從零開始的云計算生活——番外3,LVS+KeepAlived+Nginx高可用實現方案

目錄 前言 一、環境搭建 1.環境準備 2.安裝ipvsadm和keepalived(Lvs服務器),nginx服務器安裝nginx 3.為兩臺RS配置虛擬ip(nginx服務器) 1.配置虛擬網絡子接口 2.ARP響應級別與通告行為的概念 3.配置ARP 二、Ke…

100201組件拆分_編輯器-react-仿低代碼平臺項目

文章目錄1 設計UI,組件拆分2 實現關于1 設計UI,組件拆分 編輯器整體如上圖所示,重點關注: flex彈性布局 上 左中右 下 左中右 畫布居中畫布Y軸滾動 2 實現 src/pages/question/Edit/index.tsx代碼如下: import { …

CS課程項目設計2:交互友好的五子棋游戲

上次給大家分享了井字棋游戲的設計流程 CS課程項目設計1:交互友好的井字棋游戲-CSDN博客https://blog.csdn.net/weixin_36431280/article/details/149309500?spm1001.2014.3001.5501今天打算再分享進階版井字棋游戲的版本設計——五子棋游戲。五子棋游戲操作方式與…

如何用山海鯨輕松構建3D智慧大屏?

一、什么是3D可視化大屏? 3D可視化大屏是一種結合了三維(3D)圖形技術與數據可視化技術的信息展示平臺,它通過在大型屏幕上以三維立體的形式呈現復雜的數據和信息,為用戶提供直觀、生動的視覺體驗。這種技術將抽象的數…

牛客網 SQL 刷題(全部題目,最優解,復雜題有講解)

刷題網址:https://www.nowcoder.com/exam/oj?questionJobId10&subTabNameonline_coding_page有時主頁顯示的題目序號與點進去之后的題目序號有所不同,這里以點進去之后的題目序號為主,如果日后還是有所出入,可以憑題目名稱找…

Linux 系統管理基礎教程

一、引言在 Linux 系統中,系統管理是一項至關重要的任務,它涉及到進程和服務的管理、系統運行級別的控制以及關機重啟等操作。本文將詳細介紹 Linux 系統管理的基礎知識,幫助讀者更好地理解和掌握 Linux 系統的管理技巧。二、Linux 中的進程和…

如何實戰應用快鯨aiseo提升百度搜索排名?

百度搜索排名優化策略 百度搜索排名的提升,是企業獲取在線可見性與自然流量的核心目標。有效的優化策略需基于對百度搜索算法原理的深入理解,遵循其重視內容質量與用戶體驗的核心準則。具體而言,這涉及構建完善的網站技術架構以確保高效爬取與…

element-plus——圖標推薦

以下是 Element Plus 中適合編輯頁面使用的圖標組件示例:<!-- 編輯相關 --> <el-icon><Edit /></el-icon> <!-- 基礎編輯圖標 --> <el-icon><EditPen /></el-icon> <!-- 鋼筆樣式編輯圖標 --&g…

黃仁勛鏈博會首秀:中國開源AI催化全球革命,機器人浪潮重塑未來工廠

7月16日&#xff0c;北京鏈博會開幕式迎來一位特殊演講者——英偉達創始人黃仁勛身著唐裝&#xff0c;首次以中文登臺演講。這位AI芯片巨頭的掌舵人坦言“很緊張”&#xff0c;卻清晰傳遞出一個重要觀點&#xff1a;中國的開源AI已成為世界進步的催化劑&#xff0c;讓每個國家、…

uniapp云托管前端網頁

uniCloud控制臺 實名認證

27、鴻蒙Harmony Next開發:ArkTS并發(Promise和async/await和多線程并發TaskPool和Worker的使用)

目錄 異步并發 (Promise和async/await) Promise async/await 多線程并發 多線程并發模型 內存共享模型 Actor模型 TaskPool TaskPool運作機制 TaskPool注意事項 Concurrent裝飾器 裝飾器說明 裝飾器使用示例 TaskPool擴縮容機制 擴容機制 縮容機制 Worker Wo…

Web前端:JavaScript鼠標事件

1. onclick&#xff08;鼠標單擊事件&#xff09;觸發條件&#xff1a;用戶用鼠標左鍵單擊元素時觸發使用場景&#xff1a;按鈕操作、菜單展開/關閉、提交表單等示例代碼&#xff1a;<button id"myButton">點擊我</button> <script>document.getEl…