在 Python 中,**模組(Module)和包(Package)**是組織和管理代碼的基本單位。以下是它們的詳細說明:
import math
print(math.sqrt(16)) # 輸出:4.0
from mypackage import mymodule
使用 Python 模組時,通常不會自動生成額外的文件,除非涉及到特定的情況。以下是一些可能產生的文件類型:
在使用模組時,最常見的自動生成文件是字節碼檔案(.pyc)和 pycache 目錄。如果使用包,則需要包含 init.py 檔案來標識包。這些文件和目錄有助於提高代碼的執行效率和組織性。
import module_name
from module_name import function_name
import module_name as alias
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!
from module_name import *
import importlib
module = importlib.import_module('module_name')
在 Python 中,Namespace(命名空間)是一個容器,用於存儲變數名稱(標識符)及其對應的物件。
命名空間的主要目的是為了避免命名衝突,確保同名的變數或函數在不同的範疇中不會互相影響。
命名空間的類型 LEGB 的四個層級
LEGB 的查找順序是按照以下層級進行的:
Local (局部):首先查找當前函數內部定義的變數。如果變數在局部命名空間中存在,則直接使用。
Enclosing (閉包):如果在局部命名空間中找不到,則查找包含當前函數的外部函數的命名空間。這適用於嵌套函數的情況。
Global (全域):如果在閉包命名空間中仍然找不到,則查找模組層級定義的變數和函數。
Built-in (內建):最後,如果在全域命名空間中仍然找不到,則查找 Python 內建的標識符,如 print()、len() 等。