如何理解 python 中的 module

1.1 什么是 module

module 是一个包含 Python 代码的文件,它可以定义函数、类、变量,也可以包含可执 行的代码。模块是 Python 代码的组织单位,有助于将代码分割成更小、更可管理的部分。 换而言之, Python 中的任意 .py 文件都可以作为模块(module)来使用。

1.2 创建 module

一个模块就是一个 Python 文件(.py 文件),文件名即为模块名。例如,创建一个名为 my_module.py 的文件:

# my_module.py

def greet(name):
    return f"Hello, {name}!"

PI = 3.14159

1.3 导入模块并使用

在另一个 Python 文件或交互式环境中,可以使用 import 语句导入模块:

# main.py

import my_module

print(my_module.greet("Alice"))  # 输出: Hello, Alice!
print(my_module.PI)              # 输出: 3.14159

1.0 模块的结构和组织 — 包(packages)

包是模块的集合,实际上是包含多个模块的目录(一个包含一些.py 文件的 folder)。包目 录中必须包含一个 __init__.py 文件(即使它为空),表示这是一个包。

# directory structure
my_package/
    __init__.py
    module1.py
    module2.py

1.1 ‘init.py’ 文件

__init__.py 文件用于初始化包。它可以包含初始化代码,或者用来定义包的公共接口 。Python 3.3 及以后的版本中,init.py 文件不是必须的,但它仍然被广泛使用

1.2 ‘init.py’ 的功能

1.2.1 空的 init.py 文件

如果你只是想将目录标记为一个包,没有其他需求,可以将 init.py 文件保持为空。

# __init__.py

1.2.2 初始化代码

如果你需要在包被导入时执行一些初始化代码,可以在 init.py 文件中编写这些代码 。例如:

# __init__.py
print("Initializing the package")

# 初始化代码
def initialize():
    print("Package has been initialized")

1.2.3 定义包的公共接口

可以在 __init__.py 文件中导入包内的重要模块或函数,以便用户在导入包时能直接访 问这些功能。例如:

# __init__.py
from .moduleA import functionA
from .moduleB import ClassB

__all__ = ['functionA', 'ClassB']

这里的 all 列表用于定义 from package import * 时要导入的模块或对象。

1.2.4 将当前目录临时加入到 pythonpath 中

当 module1 试图引用 module2 时, 可能会报错 “No module named ‘module2’”

import os
import sys

current_dir = os.path.dirname(__file__)

if current_dir not in sys.path:
    sys.path.append(current_dir)

print("Init", __file__)