【庫(Library)、包(Package)和模塊(Module)解析】

在Python中,**庫(Library)、包(Package)和模塊(Module)**是代碼組織的不同層級,而import語句的導入行為與它們密切相關。以下是詳細對比和解釋:


📦 1. 核心概念對比

術語定義示例文件結構
模塊單個.py文件,包含Python代碼(變量、函數、類)math.pymath.py
特殊的模塊集合,包含__init__.py文件的目錄numpy(文件夾)numpy/__init__.py
廣義概念,指可復用的代碼集合(可能包含多個包/模塊)requests由多個包/模塊組成

🔍 2. import導入的實質

(1) 導入目標
import xxx  # 導入的是模塊/包本身(如`import numpy`)
from xxx import yyy  # 從模塊/包中導入具體對象(如`from math import sqrt`)
(2) 導入時的查找順序
  1. 內置模塊(如sysmath
  2. sys.path中的路徑(包括當前目錄、PYTHONPATH等)
  3. 安裝的第三方庫site-packages目錄)

📂 3. 文件結構示例

模塊
# my_module.py
def hello():print("Hello from module!")

導入方式:

import my_module
my_module.hello()
my_package/
├── __init__.py       # 包標識文件(可為空)
├── module1.py        # 子模塊
└── subpackage/       # 子包└── __init__.py

導入方式:

from my_package.module1 import some_function

? 4. 常見疑問解答

Q1:import numpy時到底導入了什么?
  • 導入的是numpy包的頂層模塊(即numpy/__init__.py中定義的內容)
  • 實際使用時,Python會按需加載子模塊(如numpy.array
Q2:庫和包的區別?
  • 是功能集合的抽象概念(如Pandas庫)
  • 是庫的物理組織形式(如pandas包包含pandas/corepandas/io等子包)
Q3:為什么要有__init__.py
  • 標識目錄為Python包(Python 3.3+后可省略,但顯式聲明更規范)
  • 初始化包級變量或控制導入行為(如__all__列表)

💡 5. 最佳實踐

? 推薦做法
# 明確導入層級(避免命名沖突)
from package.subpackage import specific_function# 使用別名簡化長包名
import matplotlib.pyplot as plt
? 避免行為
# 通配符導入(污染命名空間)
from module import *  # 重復導入相同模塊(浪費資源)
import module
import module  # 無意義

🌰 6. 實戰案例

場景:自定義一個包
my_utils/
├── __init__.py           # 聲明為包
├── math_utils.py         # 模塊:數學工具
└── string_utils.py       # 模塊:字符串工具

__init__.py(控制導入行為):

# 允許直接導入包時訪問子模塊
from .math_utils import add, multiply
from .string_utils import reverse_string__all__ = ['add', 'multiply', 'reverse_string']  # 定義*導入的范圍

使用方式

import my_utils
my_utils.add(1, 2)  # 直接調用from my_utils import reverse_string
reverse_string("abc")  # 'cba'

📚 總結

概念本質import行為典型用途
模塊單個.py文件導入文件中的所有代碼組織小規模功能
__init__.py的目錄導入包初始化內容或子模塊組織大型項目代碼
功能集合的抽象概念通過導入其下的包/模塊使用指代第三方功能集合

理解這些區別有助于:

  • 更規范地組織代碼
  • 避免導入沖突
  • 優化項目結構

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

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

相關文章

裸機上的 printf:在無操作系統環境下構建 C 標準庫

在嵌入式開發和底層系統編程領域,裸機開發是一項極具挑戰性但又至關重要的任務。想象一下,在沒有操作系統支持的情況下,讓 C 語言的標準庫函數,如printf正常工作,這聽起來是不是很有趣又充滿挑戰?今天&…

基于STM32F103的智能機械臂識別與控制項目(課件PPT+源代碼)

以下是基于 STM32F103 的智能機械臂識別與控制項目的詳細介紹: 項目概述 該項目以 STM32F103 為核心控制器,結合多種傳感器和技術,實現了機械臂的智能識別與控制功能,可完成倉庫貨物的識別、搬運等任務,并支持多種控…

Codeforces Round 1023 (Div. 2)

Dashboard - Codeforces Round 1023 (Div. 2) - Codeforces 一個構造問題&#xff0c;我把最大的數放在一個數組&#xff0c;其余數放在另一個數組&#xff0c;就能保證gcd不同 來看代碼&#xff1a; #include <bits/stdc.h> using namespace std;int main() {int t;ci…

6.01 Python中打開usb相機并進行顯示

本案例介紹如何打開USB相機并每隔100ms進行刷新的代碼,效果如下: 一、主要思路: 1. 打開視頻流、讀取幀 self.cam_cap = cv2.VideoCapture(0) #打開 視頻流 cam_ret, cam_frame = self.cam_cap.read() //讀取幀。 2.使用定時器,每隔100ms讀取幀 3.顯示到Qt的QLabel…

JVM——即時編譯

分層編譯模式&#xff1a;動態平衡啟動速度與執行效率 分層編譯是現代JVM&#xff08;如HotSpot、GraalVM&#xff09;實現高性能的核心策略之一&#xff0c;其核心思想是根據代碼的執行熱度動態選擇不同的編譯層次&#xff0c;實現啟動速度與運行效率的最佳平衡。以HotSpot虛…

Auto DOP:讓并行執行實現智能調優 | OceanBase 實踐

隨著數據量的迅速增長&#xff0c;企業數據庫往往面臨著一個困局&#xff1a;復雜的分析查詢需要充分的資源來保證性能&#xff0c;但過多增加并行執行又會造成資源競爭&#xff0c;影響系統穩定性。傳統基于DBA人工干預的并行度調節機制&#xff0c;既低效又難以適應動態變化的…

【區塊鏈】Uniswap之滑點(Slippage)

一、滑點是什么&#xff1f; 滑點&#xff08;Slippage&#xff09;是指你下單預期價格和最終成交價格之間的差距。 在 DEX 中&#xff0c;你的交易會影響池子的價格&#xff08;AMM機制&#xff09;&#xff0c;所以&#xff1a; 下單越大&#xff0c;滑點越大&#xff1b;…

[前端]Javascript獲取元素寬度

元素寬度屬性對比示意圖 ---------------------------------- | 外邊距&#xff08;margin&#xff09; | -------------------------------- | | 邊框&#xff08;border&#xff09; | | | -------------------------- | | | …

數字人驅動/動畫方向最新頂會期刊論文收集整理 | AAAI 2025

會議官方論文列表&#xff1a;https://ojs.aaai.org/index.php/AAAI/issue/view/624 以下論文部分會開源代碼&#xff0c;若開源&#xff0c;會在論文原文的摘要下方給出鏈接。 語音驅動頭部動畫/其他 EchoMimic: Lifelike Audio-Driven Portrait Animations through Editabl…

Windows系統下【Celery任務隊列】python使用celery 詳解(一)

Celery 是一個基于 Python 的分布式任務隊列框架&#xff0c;它允許你在不同的進程甚至不同的服務器上異步執行任務。 特點 簡單&#xff1a;易于使用和配置&#xff0c;提供了簡潔的 API。高可用&#xff1a;支持任務的可靠交付&#xff0c;即使在出現故障時也能保證任務不丟…

移動設備常用電子屏幕類型對比

概述 LCD 家族 &#xff08;TN、STN、TFT、IPS、VA&#xff09;依賴背光&#xff0c;性能差異主要來自液晶排列和驅動方式。OLED 以自發光為核心優勢&#xff0c;但成本與壽命限制其普及。E-Paper 專為低功耗靜態顯示設計&#xff0c;與傳統屏幕技術差異顯著。 參數LCD&#…

Vue3.5 企業級管理系統實戰(十八):用戶管理

本篇主要探討用戶管理功能&#xff0c;接口部分依然是使用 Apifox mock 模擬。 1 用戶 api 在 src/api/user.ts 中添加用戶相關 CRUD 接口&#xff0c;代碼如下&#xff1a; //src/api/user.ts import request from "/api/config/request"; // 從 "./type&q…

【C】初階數據結構14 -- 歸并排序

本篇文章主要是講解經典的排序算法 -- 歸并排序 目錄 1 遞歸版本的歸并排序 1&#xff09; 算法思想 2&#xff09; 代碼 3&#xff09; 時間復雜度與空間復雜度分析 &#xff08;1&#xff09; 時間復雜度 &#xff08;2&#xff09; 空間復雜度 2 迭代版本的歸并…

【相機標定】OpenCV 相機標定中的重投影誤差與角點三維坐標計算詳解

摘要&#xff1a; 本文將從以下幾個方面展開&#xff0c;結合典型代碼深入解析 OpenCV 中的相機標定過程&#xff0c;重點闡述重投影誤差的計算方法與實際意義&#xff0c;并通過一個 calcBoardCornerPositions() 函數詳細講解棋盤格角點三維坐標的構建邏輯。 在計算機視覺領域…

RabbitMQ-運維

文章目錄 前言運維-集群介紹多機多節點單機多節點 多機多節點下載配置hosts?件配置Erlang Cookie啟動節點構建集群查看集群狀態 單機多節點安裝啟動兩個節點再啟動兩個節點驗證RabbitMQ啟動成功搭建集群把rabbit2, rabbit3添加到集群 宕機演示仲裁隊列介紹raft算法協議 raft基…

JVM之內存管理(一)

部分內容來源&#xff1a;JavaGuide二哥Java 圖解JVM內存結構 內存管理快速復習 棧幀&#xff1a;局部變量表&#xff0c;動態鏈接&#xff08;符號引用轉為真實引用&#xff09;&#xff0c;操作數棧&#xff08;存儲中間結算結果&#xff09;&#xff0c;方法返回地址 運行時…

無線射頻模塊如何通過CE RED認證?關鍵規范與準備策略詳解

隨著無線通信設備在歐洲市場的廣泛應用&#xff0c;CE RED認證已成為模塊類產品進入歐盟的強制通行證。作為專注于LoRa模塊、對講模塊與FSK射頻模塊研發的技術企業&#xff0c;我們深知從設計、測試到量產&#xff0c;每一個環節都需緊扣合規底線。本文將圍繞CE RED認證核心要求…

Golang中集合相關的庫

一切編程語言的底層結構都是數組&#xff0c;其它復雜數據結構如Map, Stack&#xff0c;Heap和Queue都是基于數組建立起來的。 Go語言主流工具庫推薦&#xff08;含常用數據結構實現&#xff09; 以下是目前Go生態中最主流且活躍的工具庫&#xff0c;包含隊列、棧、優先級隊列…

ABAP 導入Excel形成內表

文章目錄 創建導入模板程序實現代碼代碼解析運行結果 創建導入模板 程序實現 代碼 *&---------------------------------------------------------------------* *& Report Z_EXCEL_UPLOAD_LHY *&--------------------------------------------------------------…

特殊配合力(SCA)作為全基因組關聯分析(GWAS)的表型,其生物學意義和應用價值

生物學意義 解析非加性遺傳效應 特殊配合力(SCA)主要反映特定親本組合的雜交優勢,由非加性遺傳效應(如顯性、超顯性、上位性)驅動。顯性效應涉及等位基因間的顯性互作,上位性效應則涉及不同位點間的基因互作。通過SCA-GWAS,可以定位調控這些非加性效應的關鍵基因組區域…