【學Python自動化】 6. Python 模塊系統學習筆記

一、模塊基礎

什么是模塊?

  • 包含 Python 定義和語句的 .py 文件

  • 解決代碼復用和組織問題

  • 每個模塊有自己的命名空間

創建模塊示例


# fibo.py - 斐波那契模塊
def fib(n):"""打印小于n的斐波那契數列"""a, b = 0, 1while a < n:print(a, end=' ')a, b = b, a + bprint()def fib2(n):"""返回小于n的斐波那契數列列表"""result = []a, b = 0, 1while a < n:result.append(a)a, b = b, a + breturn result

二、模塊詳解

導入方式

  1. 基本導入

import fibo
fibo.fib(1000)  # 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
fibo.fib2(100)  # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
  1. 導入特定函數

from fibo import fib, fib2
fib(500)  # 直接使用,無需模塊名前綴
  1. 導入所有(不推薦)

from fibo import *  # 可能污染命名空間
  1. 使用別名

import fibo as fib
fib.fib(500)from fibo import fib as fibonacci
fibonacci(500)

模塊特性

  • 一次性初始化:模塊代碼只在第一次導入時執行

  • 獨立命名空間:避免命名沖突

  • 可重載:使用 importlib.reload()

1 以腳本方式執行模塊

雙重用途模式


# 在模塊末尾添加:
if __name__ == "__main__":import sysfib(int(sys.argv[1]))

使用方法:


# 作為腳本執行
python fibo.py 50
# 輸出: 0 1 1 2 3 5 8 13 21 34# 作為模塊導入
import fibo  # 不執行測試代碼
2 模塊搜索路徑

Python 搜索模塊的順序:

  1. 內置模塊 (sys.builtin_module_names)

  2. sys.path 中的目錄:

  • 當前腳本目錄

  • PYTHONPATH 環境變量

  • 標準庫和 site-packages


import sys
print(sys.path)  # 查看搜索路徑
sys.path.append('/my/module/path')  # 添加自定義路徑
3 編譯的 Python 文件
  • 緩存文件:pycache/module.version.pyc

  • 自動對比源碼修改日期

  • 提高加載速度,不影響執行速度

優化選項:


python -O script.py    # 去除斷言
python -OO script.py   # 去除斷言和文檔字符串

三、標準模塊

常用標準模塊


import sys# 交互模式提示符
sys.ps1 = 'C> '  # 主提示符
sys.ps2 = '... '  # 次提示符(僅交互模式)# 模塊搜索路徑操作
sys.path.append('/ufs/guido/lib/python')# 平臺特定模塊
try:import winreg  # 僅Windows可用
except ImportError:print("winreg module not available")

四、dir() 函數

查看對象內容


import fibo, sys# 查看模塊內容
print(dir(fibo))  # ['__name__', 'fib', 'fib2']
print(dir(sys))   # 顯示sys模塊的所有屬性# 查看當前命名空間
a = [1, 2, 3, 4, 5]
import fibo
fib = fibo.fib
print(dir())  # 顯示所有當前定義的名稱# 查看內置函數
import builtins
print(dir(builtins))

五、包(Package)

包的結構


sound/                          # 頂層包__init__.py               # 初始化包(必需)formats/                  # 子包__init__.pywavread.pywavwrite.pyeffects/                  # 子包__init__.pyecho.pysurround.pyfilters/                  # 子包__init__.pyequalizer.py

導入方式

  1. 絕對導入

import sound.effects.echo
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
  1. 從包中導入模塊

from sound.effects import echo
echo.echofilter(input, output, delay=0.7, atten=4)
  1. 直接導入函數

from sound.effects.echo import echofilter
echofilter(input, output, delay=0.7, atten=4)
1 從包中導入 *

控制導入內容


# sound/effects/__init__.py
__all__ = ["echo", "surround", "reverse"]# 使用
from sound.effects import *  # 只導入 __all__ 中指定的模塊

注意事項


# 如果本地有同名函數,會覆蓋子模塊
__all__ = ["echo", "surround", "reverse"]def reverse(msg: str):  # 這會覆蓋 reverse.py 子模塊return msg[::-1]
2 相對導入

包內模塊引用


# 在 sound/effects/surround.py 中
from . import echo        # 從當前包導入
from .. import formats    # 從上級包導入  
from ..filters import equalizer  # 從兄弟包導入

注意: 主模塊必須使用絕對導入

3 多目錄中的包

擴展包路徑


# 修改包的搜索路徑
import mypackage
mypackage.__path__.append("/path/to/extra/modules")

六、? 重要特性總結

模塊特性

  • name 變量:模塊名,“main” 表示直接運行

  • 獨立命名空間:避免全局變量污染

  • 一次性初始化:避免重復執行初始化代碼

包特性

  • 必須包含 init.py:標識目錄為包

  • 分層組織:使用點號表示法

  • 相對導入:支持包內模塊間的相對引用

最佳實踐

  • 使用絕對導入:提高代碼可讀性和可維護性

  • 避免 from module import *:明確導入所需內容

  • 使用 if name == “main”:使模塊可執行也可導入

  • 合理組織包結構:按功能劃分模塊

七、🔧 實用技巧

動態導入


# 按需導入模塊
module_name = "json"
json = __import__(module_name)# 使用 importlib
import importlib
json = importlib.import_module("json")

查看模塊信息


import mathprint(math.__name__)    # 模塊名
print(math.__file__)    # 模塊文件路徑
print(math.__doc__)     # 模塊文檔字符串

重載模塊


# 開發時重新加載模塊
import importlib
importlib.reload(module_name)

八、🎯 模塊系統優勢

  • 代碼復用:避免重復造輪子

  • 命名空間管理:避免命名沖突

  • 代碼組織:大型項目的結構化基礎

  • 維護性:便于團隊協作和代碼維護

Python 的模塊系統是其生態系統繁榮的基礎,理解和熟練使用模塊系統是成為 Python 開發高手的關鍵一步!

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

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

相關文章

機器學習-時序預測2

門控循環單元GRU 接著機器學習-時序預測1-CSDN博客這個說&#xff0c;GRU是LSTM的一個簡化而高效的變體&#xff0c;都使用“門控機制”來控制信息流&#xff0c;但它通過合并一些組件&#xff0c;使結構更簡單、參數更少、計算更快&#xff0c;同時在許多任務上性能與 LSTM 相…

數據湖與數據倉庫

大數據前沿技術詳解 目錄 數據湖技術湖倉一體架構數據網格實時流處理技術云原生數據技術數據治理與血緣AI原生數據平臺邊緣計算與大數據 核心內容包括&#xff1a; 數據湖技術 - 架構模式、技術棧、面臨的挑戰 湖倉一體架構 - Delta Lake、Iceberg、Hudi等主流實現 數據網格…

Python OpenCV圖像處理與深度學習:Python OpenCV入門-圖像處理基礎

Python OpenCV入門實踐&#xff1a;圖像處理基礎 學習目標 通過本課程&#xff0c;學員們將了解OpenCV的基本概念、安裝方法&#xff0c;掌握如何使用Python和OpenCV進行基本的圖像處理操作&#xff0c;包括圖像的讀取、顯示、保存以及簡單的圖像變換。 相關知識點 Python Open…

【lua】Lua 入門教程:從環境搭建到基礎編程

Lua 入門教程&#xff1a;從環境搭建到基礎編程 Lua 是一種輕量級、可擴展的腳本語言&#xff0c;廣泛應用于游戲開發&#xff08;如《魔獸世界》《Roblox》&#xff09;、嵌入式系統、Web 后端等領域。它語法簡潔、運行高效&#xff0c;非常適合作為編程入門語言或輔助開發工…

MySQL索引事務(未完成)

索引的相關操作1.查看索引show index from 表名;2.創建索引create index 索引名字 on 表名(列名);創建索引&#xff0c;是一個危險操作創建索引的時候&#xff0c;需要針對現有的數據&#xff0c;進行大規模的重新整理如果當前表是一個空表&#xff0c;或者數據不多&#xff0c…

Docker一鍵快速部署壓測工具,高效測試 API 接口性能

以下是對該壓測工具的簡單介紹&#xff1a; 這是一個簡易的在線壓測工具&#xff0c;可以對 API 接口/頁面、websocket服務等進行壓力測試&#xff0c;檢驗服務的并發能力使用 thinkphp ant design pro 構建&#xff0c;壓測能力驅動基于 wrk 、 php 多進程協程實現支持在線授…

前端緩存問題詳解

前端緩存是提升網頁性能和用戶體驗的重要手段&#xff0c;但也常導致資源更新不及時等問題。以下是關于前端緩存的核心知識點和解決方案&#xff1a; 一、緩存類型及工作原理HTTP緩存&#xff08;最核心&#xff09; 強緩存&#xff1a;直接從本地讀取&#xff0c;不請求服務器…

webpack升級

一、調研對比維度Webpack 4 狀態Webpack 5 改進與優勢構建速度較慢&#xff0c;增量構建效率低? 引入 持久化緩存&#xff08;filesystem cache&#xff09;&#xff0c;二次構建速度提升高達 90%Tree Shaking支持基礎 Tree Shaking&#xff0c;需手動配置? 更強的 Tree Shak…

Logstash數據遷移之es-to-kafka.conf詳細配置

在 Logstash 中配置從 Elasticsearch (ES) 讀取數據并輸出到 Kafka 是一個相對高級但強大的用法&#xff0c;通常用于數據遷移、重新索引、或構建新的數據管道。 下面我將詳細解釋配置文件的各個部分和細節。 核心配置文件結構 (es-to-kafka.conf) 一個完整的配置文件主要包含三…

在OracleLinux9.4系統上靜默滾動打補丁安裝Oracle19c

OracleLinux9.4系統 安裝Oracle19c 文章目錄OracleLinux9.4系統 安裝Oracle19c一、安裝準備1、yum安裝預檢查需要的包2、系統資源二、滾動安裝一、安裝準備 1、yum安裝預檢查需要的包 yum install libnsl yum install -y oracle-database-preinstall-19c # 最新的unzip yum i…

Android原生HttpURLConnection上傳圖片方案

創建上傳方法object FormUploader {private val BOUNDARY "Boundary-" System.currentTimeMillis()private const val LINE_FEED "\r\n"Throws(IOException::class)fun uploadImage(url: String, imageFile: File, params: MutableMap<String?, Str…

落葉清掃機器人cad+三維圖+設計說明書

摘 要 城市公共場所、校園等環境中&#xff0c;落葉的清掃一直是一個繁瑣而耗時的任務。傳統的人工清掃方式不僅效率低下&#xff0c;還存在人力浪費和安全隱患等問題。因此&#xff0c;研發一款能夠自主完成落葉清掃任務的機器人成為了當今研究的熱點之一。隨著科技的不斷進…

國別域名的SEO優勢:是否更利于在當地搜索引擎排名?

當你盯著搜索引擎結果頁發呆時&#xff0c;有沒有想過——憑什么那個.jp域名的網站能排在.ca前面&#xff1f;別扯什么內容質量&#xff0c;上周幫客戶優化新加坡市場時&#xff0c;親眼見著兩個內容相似度90%的頁面&#xff0c;.sg域名比.com.au在Google Singapore上高出3個排…

動態配置最佳實踐:Spring Boot 十種落地方式與回滾審計指南(含實操與避坑)

作為一名Spring Boot開發者&#xff0c;正在運維一個高可用微服務系統&#xff1a;業務需求變化頻繁&#xff0c;需要實時調整配置如數據庫連接或日志級別&#xff0c;但每次修改都得重啟應用&#xff0c;造成服務中斷和用戶投訴。這不是小麻煩&#xff0c;而是配置管理的痛點—…

vue社區網格化管理系統(代碼+數據庫+LW)

摘要 隨著城市化進程的加快&#xff0c;社區管理的復雜性逐漸增大&#xff0c;傳統的管理模式已無法滿足現代社區管理的需求。社區網格化管理系統作為一種新的管理模式&#xff0c;通過將社區劃分為多個網格單元&#xff0c;使得管理更加精細化、智能化和高效化。本論文基于Sp…

使用EasyExcel實現Excel單元格保護:自由鎖定表頭和數據行

使用EasyExcel實現Excel單元格保護&#xff1a;鎖定表頭和第二行數據 前言 在日常開發中&#xff0c;我們經常需要導出Excel文件&#xff0c;有時還需要對Excel中的某些單元格進行保護&#xff0c;防止用戶誤修改。本文將介紹如何使用EasyExcel 4.0.3實現鎖定Excel表頭和第二行…

dify docker知識庫topk最大值參數配置

1 問題說明 dify構建RAG知識庫過程中&#xff0c;通過會遇到一些默認配置不能解決的問題。 比如topk&#xff0c;topk默認最大10&#xff0c;對語義模糊的檢索&#xff0c;目標文檔可能沒進前10&#xff0c;出現在10-30區間。 所以&#xff0c;需要調整topk最大值參數。 # T…

SRE命令行兵器譜之一:精通top/htop - 從性能“體檢”到瓶頸“解剖”

SRE命令行兵器譜之一:精通top/htop - 從性能“體檢”到瓶頸“解剖” SRE的“戰場”:真實故障場景 下午三點,監控系統告警:“核心API服務響應時間(P99)飆升至5秒”。用戶已經開始在群里抱怨接口超時。這是一個典型的線上性能問題,每一秒的延遲都在影響用戶體驗和公司收…

一、Git與Gitee常見問題解答

Git與Gitee常見問題解答 Git相關問題 Q1: 什么是Git&#xff1f; A: Git是一個分布式版本控制系統&#xff0c;由Linux之父Linus Torvalds開發。它能夠跟蹤文件的變更歷史&#xff0c;支持多人協作開發&#xff0c;是現代軟件開發中不可或缺的工具。 Q2: Git的三個區域是什么&a…

kubernetes服務質量之QoS類

一、QoS類 Kubernetes的QoS&#xff08;Quality of Service&#xff09;類別允許您指定可用于應用程序的可用資源數量&#xff0c;以便更好地控制應用程序的可用性。它還允許您限制特定應用程序的資源使用率&#xff0c;以幫助保護系統的穩定性和性能。 Kubernetes 創建 Pod 時…