動態

詳情 返回 返回

Python學習筆記(下) - 動態 詳情

模塊導入

Python 中,一個 模塊 就是一個包含了 Python 代碼的 .py 文件。導入模塊的目的是引入該文件內定義的函數、類或變量等

💎方式一:導入整個模塊 ( import module_name )

這是最常見和推薦的方式,因為它能保持清晰的命名空間,避免衝突

語句 作用 訪問方式
import math 將整個 math 模塊對象引入 必須通過模塊名訪問:math.pi
import pandas as pd 使用別名 as 導入 使用別名訪問:pd.DataFrame
🔫方式二:導入特定名稱 ( from module import name )

如果你只需要模塊中的少數幾個對象,可以直接將它們引入到當前命名空間

語句 作用 訪問方式
from math import pi pi 直接引入當前作用域 直接使用名稱:print(pi)
from math import pi, sqrt pisqrt 直接引入當前作用域 直接使用名稱:print(pi, sqrt)
from math import pi as p 使用別名 p 導入 使用別名訪問:print(p)
from math import pi as p, sqrt as sq 使用別名 psq 導入 使用別名訪問:print(p, sq)
💊方式三:星號導入 ( from module import )

星號導入會將模塊中所有公有名稱(不以下劃線 _ 開頭的名稱)全部引入到當前命名空間

語句 作用 訪問方式
from os import * 導入 os 模塊中所有公有名稱 強烈不推薦,極易導致命名衝突,使代碼難以閲讀和維護

包導入

一個包就是一個包含多個模塊和子包的目錄(文件夾),用於提供結構化的命名空間。導入包涉及絕對導入和相對導入

🔑方式一:絕對導入 ( Absolute Imports )

這是在項目中跨包或訪問頂級模塊的標準方式。導入路徑從項目的根包名開始

假設項目結構:
project/packageA/module1.py 📌
project/packageB/module2.py
project/packageB/module3.py
語句 作用 訪問方式
from packageB import module2 module1 中訪問 module2 module2.func_name
from packageB import module2, module3 module1 中訪問 module2module3 module2.func_name
module3.func_name
from packageB import module2 as m2 使用別名 m2 導入 m2.func_name
from packageB import module2 as m2, module3 as m3 使用別名 m2m3 導入 m2.func_name
m3.func_name
from packageB.module2 import func_name module1 中訪問 module2內的函數 print(func_name)
from packageB.module2 import func_name as fn 使用別名 fn 導入 print(fn)
from packageB.module2 import func_name, func_name2 module1 中訪問 module2內的函數 print(func_name)
print(func_name2)
from packageB.module2 import func_name as fn, func_name2 as fn2 使用別名 fnfn2 導入 print(fn)
print(fn2)
🔑方式一:相對導入 ( Relative Imports )

相對導入只用於同一包內部的模塊互相引用,它使用點號 ( . ) 來表示相對位置。

假設項目結構:
project/pp/packageA/module1.py 📌
project/pp/packageA/module2.py
project/pp/packageA/module3.py
project/pp/module4.py
project/pp/module5.py
語句 作用 訪問方式
from . import module2 module1 中訪問 module2 module2.func_name
from . import module2, module3 module1 中訪問 module2module3 module2.func_name
module3.func_name
from . import module2 as m2 使用別名 m2 導入 m2.func_name
from . import module2 as m2, module3 as m3 使用別名 m2m3 導入 m2.func_name
m3.func_name
from .. import module4 module1 中訪問 module4 module4.func_name
from .. import module4, module5 module1 中訪問 module4module5 module4.func_name
module5.func_name
from .. import module4 as m4 使用別名 m4 導入 m4.func_name
from .. import module4 as m4, module5 as m5 使用別名 m5m5 導入 m4.func_name
m5.func_name
🎈方式三:導入包

當你導入一個包名時(如 import packageA),Python 解釋器會執行該包目錄下的 __init__.py 文件

  • 初始化: __init__.py 文件中的所有頂級代碼都會被執行一次,用於初始化包的狀態
  • 對外接口: 可以在 __init__.py 中定義 from .module import function,將包內部的常用功能提升到包的頂級命名空間,方便用户使用

導入查找順序

Python 遇到 import 語句時,它會按照以下順序查找模塊或包

  1. 檢查 sys.modules 緩存(如果已導入則直接使用)
  2. 檢查內置模塊
  3. 查找 sys.path 列表中的目錄(包括當前目錄、PYTHONPATH 環境變量和標準庫目錄)

其它&注意

  1. Python 中不可以直接導入模塊中的函數、類或變量,例如:import packageA.module1.func_name
  2. 項目入口模塊一般放在項目最外層,可以自動將當前位置加入 sys.path ,如果入口模塊放在 packageA內,那其它項目其它包會找不到,除非手動調整 sys.path
  3. 模塊測試代碼一般放在 if __name__ == "__main__": 語句下

Add a new 評論

Some HTML is okay.