.

iT邦幫忙

1

Python 模組(Module)和包(Package)的概念&用法

  • 分享至 

  • xImage
  •  

在 Python 中,**模組(Module)和包(Package)**是組織和管理代碼的基本單位。以下是它們的詳細說明:

模組 (Module)

  • 定義: 模組是包含 Python 代碼的檔案,通常是以 .py 為擴展名的檔案。模組可以包含函數、類別和變數等。
  • 用途: 模組使得代碼可以被重用和組織。你可以將相關的功能放在同一個模組中,然後在其他 Python 腳本中導入使用。
  • 導入模組:使用 import 語句來導入模組。例如:
import math
print(math.sqrt(16))  # 輸出:4.0

包 (Package)

  • 定義:包是一種特殊的模組,它是一個包含多個模組的目錄。包中必須包含一個名為 init.py 的檔案(即使是空的),以告訴 Python 這是一個包。
  • 用途:包可以用來組織和分層管理模組,特別是在大型應用程式中。它們可以幫助避免命名衝突,並提供更清晰的代碼結構。
  • 導入包中的模組:使用 import 語句來導入包中的模組。例如,如果有一個包 mypackage,裡面有一個模組 mymodule,可以這樣導入:
from mypackage import mymodule

總結

  • 模組 是單一的 Python 檔案,可以被重用。
  • 包 是一個包含多個模組的目錄,用於組織和管理代碼。

使用 Python 模組時,通常不會自動生成額外的文件,除非涉及到特定的情況。以下是一些可能產生的文件類型:

  1. 字節碼檔案 (.pyc)
  • 描述:當你導入一個模組時,Python 會將其編譯成字節碼,並將其存儲為 .pyc 檔案,這些檔案通常位於 pycache 目錄中。
  • 用途:這樣可以加快下次導入模組的速度,因為不需要重新編譯源碼。
  1. pycache 目錄
  • 描述:當 Python 生成字節碼檔案時,這些檔案會被存放在 pycache 目錄中。
  • 內容:這個目錄中會包含以 .pyc 為擴展名的字節碼檔案,檔名通常會包括源碼檔案的名稱和 Python 的版本號。
  1. init.py 檔案(對於包)
  • 描述:如果你使用的模組是包的一部分,則包目錄中必須有一個名為 init.py 的檔案。這個檔案可以是空的,但它告訴 Python 該目錄應該被視為一個包。

總結

在使用模組時,最常見的自動生成文件是字節碼檔案(.pyc)和 pycache 目錄。如果使用包,則需要包含 init.py 檔案來標識包。這些文件和目錄有助於提高代碼的執行效率和組織性。

import的方法

  1. 導入整個模組
    使用 import 語句導入整個模組:
import module_name
  1. 導入模組中的特定函數或類別
    使用 from ... import ... 語句導入模組中的特定部分:
from module_name import function_name
  1. 導入並重命名模組(常用)
    使用 as 關鍵字來給導入的模組或函數指定別名:
import module_name as alias
  1. 導入包中的模組
    如果模組位於包中,使用點(.)來指定路徑:
    假設有以下目錄結構:
mypackage/
    __init__.py
    mymodule.py

mymodule.py 的內容:

# mymodule.py
def greet(name):
    return f"Hello, {name}!"

你可以這樣導入 mymodule 模組:

from mypackage import mymodule
print(mymodule.greet("Alice"))  # 輸出:Hello, Alice!

如果你的包中有子包,可以使用點來導入子模組。例如:

mypackage/
    __init__.py
    subpackage/
        __init__.py
        submodule.py
from mypackage.subpackage import submodule

print(submodule.greet("Bob"))  # 輸出:Hello from submodule, Bob!
  1. 導入所有內容
    使用 from ... import * 導入模組中的所有內容,但這樣做不太推薦,因為可能會導致命名衝突:
from module_name import *
  1. 動態導入模組
    使用 importlib 模組進行動態導入:
import importlib
module = importlib.import_module('module_name')

在 Python 中,Namespace(命名空間)是一個容器,用於存儲變數名稱(標識符)及其對應的物件。
命名空間的主要目的是為了避免命名衝突,確保同名的變數或函數在不同的範疇中不會互相影響。

命名空間的類型 LEGB 的四個層級
LEGB 的查找順序是按照以下層級進行的:

Local (局部):首先查找當前函數內部定義的變數。如果變數在局部命名空間中存在,則直接使用。
Enclosing (閉包):如果在局部命名空間中找不到,則查找包含當前函數的外部函數的命名空間。這適用於嵌套函數的情況。
Global (全域):如果在閉包命名空間中仍然找不到,則查找模組層級定義的變數和函數。
Built-in (內建):最後,如果在全域命名空間中仍然找不到,則查找 Python 內建的標識符,如 print()、len() 等。

下一篇:python :if name == "main"


.
圖片
  直播研討會

尚未有邦友留言

立即登入留言