1.1.5 模塊與包——AI教你學Django

1.1.5 模塊與包(Django 基礎學習細節)

模塊和包是 Python 項目組織和代碼復用的基礎。Django 項目本質上就是由多個模塊和包組成。理解和靈活運用模塊與包機制,是寫好大型項目的關鍵。

一、import、from-import、as 的用法

1. import

  • 用于導入整個模塊,模塊名為文件名(不帶 .py)。
  • 用法:
    import math
    print(math.sqrt(16))  # 4.0
    

2. from … import …

  • 用于從模塊或包中導入指定成員(變量、函數、類等)。
  • 用法:
    from math import sqrt, pi
    print(sqrt(9))  # 3.0
    print(pi)       # 3.141592653589793
    

3. as

  • 用于給模塊或成員起別名,簡化書寫或防止命名沖突。
  • 用法:
    import numpy as np
    from datetime import datetime as dt
    print(np.array([1, 2, 3]))
    now = dt.now()
    

4. 多層包導入

  • 支持多級包結構:
    from myproject.utils.tools import my_func
    

二、name == “main

1. 含義

  • 每個 Python 文件都作為一個模塊,模塊有一個 __name__ 屬性。
  • 如果模塊被直接運行,__name__ == "__main__";如果被導入,__name__ 等于模塊名。

2. 作用

  • 只在腳本直接運行時執行某段代碼,導入時不執行。
  • 常用于編寫測試代碼、命令行入口。

3. 示例

# foo.py
def say_hi():print("Hi!")if __name__ == "__main__":say_hi()    # 直接運行 foo.py 時會執行
# bar.py
import foo  # 導入 foo.py,不會執行 if __name__ == "__main__" 下的內容

三、sys.path

1. sys.path 的作用

  • 是一個列表,包含所有 Python 查找模塊的目錄。
  • 可動態添加搜索路徑,方便跨目錄導入。

2. 示例

import sys
print(sys.path)
sys.path.append("/path/to/my/modules")
# 現在可以 import 該目錄下的模塊

3. 應用場景

  • 復雜項目/部署時臨時添加自定義模塊路徑
  • 避免命名沖突和導入錯誤

四、包的初始化(init.py)

1. 包的概念

  • 包是包含多個模塊的文件夾,必須包含一個 __init__.py 文件(可為空)。
  • __init__.py 的存在使 Python 將該目錄識別為包。

2. init.py 的作用

  • 初始化包(如導入常用模塊、定義包級變量/函數等)
  • 控制子模塊的導出(通過 all
  • 可以寫包級別的初始化邏輯

3. 示例結構

myproject/
├── __init__.py
├── foo.py
├── bar.py
# myproject/__init__.py
from .foo import say_hi
from .bar import some_func
  • 導入包時自動執行 __init__.py 代碼:
import myproject
myproject.say_hi()

4. all 控制包成員

# __init__.py
__all__ = ["foo", "bar"]
  • from myproject import * 時只導入 foo, bar

五、模塊與包在 Django 項目中的應用

  • 項目根目錄即包(包含 manage.py、settings.py、urls.py 等模塊)
  • 每個 app 是獨立包(含 models.py、views.py、admin.py、apps.py 等模塊)
  • 通常會在 __init__.py 中做初始化或暴露接口

六、實用小結

  • 用 import/from-import/as 靈活組織和復用代碼
  • __name__ == "__main__" 編寫可測試或可復用模塊
  • sys.path 控制模塊搜索路徑,解決復雜項目的導入問題
  • __init__.py 是包的標識和初始化位置,建議始終保留即使為空

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

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

相關文章

UE5 相機后處理材質與動態參數修改

一、完整實現流程1. 創建后處理材質材質設置:在材質編輯器中,將材質域(Material Domain)設為后處理(Post Process)設置混合位置(Blendable Location)(如After Tonemapping)創建標量/向量參數(如Intensity, ColorTint&a…

Django基礎(三)———模板

前言 在之前的文章中,視圖函數只是直接返回文本,而在實際生產環境中其實很少這樣用,因為實際的頁面大多是帶有樣式的HTML代碼,這可以讓瀏覽器渲染出非常漂亮的頁面。目前市面上有非常多的模板系統,其中最知名最好用的…

mysql6表清理跟回收空間

mysql6表清理跟回收空間 文章目錄mysql6表清理跟回收空間1.清理表2.備份表或者備份庫3.回收表空間4.查看5.驗證業務1.清理表 ## 登錄 C:\Program Files\MySQL\MySQL Server 5.6\bin>mysql -uroot -p Enter password: ****** Welcome to the MySQL monitor. Commands end w…

Java-74 深入淺出 RPC Dubbo Admin可視化管理 安裝使用 源碼編譯、Docker啟動

點一下關注吧!!!非常感謝!!持續更新!!! 🚀 AI篇持續更新中!(長期更新) AI煉丹日志-30-新發布【1T 萬億】參數量大模型!K…

VSCode同時支持Vue2和Vue3開發的插件指南

引言 隨著Vue生態系統的演進,許多開發者面臨著在同一開發環境中同時處理Vue 2和Vue 3項目的需求。Visual Studio Code (VSCode)作為最受歡迎的前端開發工具之一,其插件生態對Vue的支持程度直接影響開發效率。本文將深入探討如何在VSCode中配置插件組合&a…

卷積神經網絡CNN的Python實現

一、環境準備與庫導入 在開始實現卷積神經網絡之前,需要確保開發環境已正確配置,并導入必要的Python庫。常用的深度學習框架有TensorFlow和PyTorch,本示例將基于Keras(可使用TensorFlow后端)進行實現,因為K…

js是實現記住密碼自動填充功能

記住密碼自動填充使用js實現記住密碼功能,在下次打開登陸頁面的時候進行獲取并自動填充到頁面【cookie和localStorage】使用js實現記住密碼功能,在下次打開登陸頁面的時候進行獲取并自動填充到頁面【cookie和localStorage】 //添加功能----記住上一個登陸…

【Java】文件編輯器

代碼:(SimpleEditor.java)import java.awt.Color; import java.awt.Font; import java.awt.Insets; import java.awt.BorderLayout;import java.awt.event.ActionEvent; import java.awt.event.ActionListener;import java.io.BufferedReader…

PyTorch中torch.topk()詳解:快速獲取最大值索引

torch.topk(similarities, k=2).indices 是什么意思 torch.topk(similarities, k=2).indices 是 PyTorch 中用于獲取張量中最大值元素及其索引的函數。在你的代碼中,它的作用是從 similarities 向量里找出得分最高的2個元素的位置索引。 1. 核心功能:找出張量中最大的k個值…

快速搭建本地HTTP服務器:`python -m http.server`詳解

文章目錄 一、什么是 http.server? 二、基礎使用 1. 啟動服務器 2. 指定端口 3. 綁定特定IP 三、實際應用場景 1. 本地前端開發 2. 文件共享 3. 啟用CGI腳本(高級) 四、目錄瀏覽詳解* 五、安全注意事項 六、進階技巧 1. 后臺運行(Linux/macOS) 2. 自定義錯誤頁面 3. 結合其…

運維技術教程之Jenkins上的known_hosts文件

在Jenkins中,known_hosts文件用于存儲已驗證的遠程節點主機密鑰,避免每次連接時重復驗證。以下是基于不同場景的解決方案:1. 創建并配置 known_hosts 文件 若Jenkins提示 No Known Hosts file 或找不到文件,需手動創建并配置&…

leetcode 3201. 找出有效子序列的最大長度 I 中等

給你一個整數數組 nums。nums 的子序列 sub 的長度為 x ,如果其滿足以下條件,則稱其為 有效子序列:(sub[0] sub[1]) % 2 (sub[1] sub[2]) % 2 ... (sub[x - 2] sub[x - 1]) % 2返回 nums 的 最長的有效子序列 的長度。一個 子序列 指的…

Java并發編程第三篇(深入解析Synchronized)

1. Synchronized簡介:一個常見的并發“陷阱” 在正式開始學習新知識前,我們不妨先來看一個現象,這是一個很多并發編程新手都會遇到的“陷阱”: public class SynchronizedDemo implements Runnable {// 共享變量private static in…

Chatbox AI|多模型多模態交互+MCP,一個工具打造你的全能私人助手

ChatBoxAI集成GPT-4、Claude等頂尖模型,支持Windows/macOS/Linux多平臺,具備隱私加密、文件智能解析(PDF/代碼/圖片)及開發者友好特性。其應用覆蓋自媒體創作、代碼實時預覽、AI繪圖(封面/表情包)及聯網搜索…

在Autodl服務器中使用VNC建立圖形界面

在Autodl服務器中使用VNC建立圖形界面**AutoDL 3D 圖形桌面搭建教程****第一步:安裝桌面和 VNC****第二步:進行一次性配置****第三步:日常啟動與使用**AutoDL 3D 圖形桌面搭建教程 目標: 在你的 AutoDL 環境上,以最少的步驟搭建一…

CD54.【C++ Dev】vector和list的反向迭代器的實現

目錄 1.反向迭代器的功能 2.算法 方法1:新寫一個類用于反向迭代器 方法2:封裝正向迭代器實現反向迭代器 解析operator* 正向迭代器和反向迭代器的關系 返回 *--tmp的原因 3.為自制的vector和list編寫反向迭代器 編寫統一的反向迭代器 修改vector頭文件 修改list頭文…

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘django’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘django’問題 摘要 在日常 Django 項目開發中,最常見的“攔路虎”之一就是 ModuleNotFoundError: No module named django。該異常通常在以下場景出…

單頁面和多頁面的區別和優缺點

單頁面應用(SPA)與多頁面應用(MPA)的區別單頁面應用(SPA)整個應用只有一個HTML文件,內容通過JavaScript動態加載和渲染。頁面切換時無需重新加載整個頁面,僅更新部分DOM。依賴前端框…

暑期自學嵌入式——Day05(C語言階段)

接續上文:暑期自學嵌入式——Day04(C語言階段)-CSDN博客 點關注不迷路喲。你的點贊、收藏,一鍵三連,是我持續更新的動力喲!!! 主頁: 一位搞嵌入式的 genius-CSDN博客 …

通用人工智能AGI遙遙無期,面臨幻滅

通用人工智能AGI有可能2080年前也實現不了 首先說一下,目前的人工智能方向是錯的,通用人工智能不值得追捧。 真的特別無奈,現在還有很多人在吹AI,說什么2027年就能實現AGI,如果你指的是真正的強人工智能AGI&#xff0c…