模块

模块(module)是组织 Python 代码的单位。
模块拥有一个命名空间,其中可以包含任意的 Python 对象。例如:变量、函数、类、常量、甚至其他模块。
模块通过“导入(import)”被加载到 Python 程序中。

最基本的情况:模块 = 单个 .py 文件

例如你有一个文件:

1
mymodule.py

内容是:

1
2
def greet():
print("Hello")

你就可以在别的地方导入它:

1
2
import mymodule
mymodule.greet()

在这个意义上,模块就是单个 Python 文件


进阶:包(package)是一种特殊的模块

当你有很多 .py 文件想组织在一起时,可以创建一个
包其实也是一种“模块”,只是它是一个文件夹而不是单个文件。

例如目录结构:

1
2
3
4
mypackage/
__init__.py
utils.py
models.py

你可以这样导入:

1
2
import mypackage.utils
from mypackage import models

这里:

  • mypackage 是一个“包模块”;
  • utilsmodels 是包中的子模块;
  • 包里必须有一个 __init__.py 文件(哪怕是空的)才能被识别为包(Python 3.3 以后也支持“命名空间包”,可以省略)。

3. 模块的实际形式

模块类型例子说明
单文件模块math.py一个普通的 .py 文件
包模块mypackage/一个包含 __init__.py 的文件夹
内建模块sys, os编译进 Python 解释器的模块(没有 .py 文件)
扩展模块_socket.pyd, .so用 C/C++ 编写的模块

导入

当导入单个 Python 文件(模块)或整个包时,Python 的 import 有几种常见语法形式 👇


🧩 一、导入单个 Python 文件(模块)

假设你有一个文件:

1
mymodule.py

内容:

1
2
def greet():
print("Hello")

✅ 基本导入方式

1
2
import mymodule
mymodule.greet() # 使用“模块名.函数名”调用

这里:

  • import mymodule:告诉 Python 去加载 mymodule.py
  • Python 会创建一个命名空间 mymodule
  • 你通过 mymodule.greet() 访问它的内容。

✅ 给模块起别名

1
2
import mymodule as mm
mm.greet()

as 只是起个简短名字,常用于像 import numpy as np 这样的情况。


✅ 从模块中导入部分对象

1
2
from mymodule import greet
greet()

这表示只把 mymodule 里的 greet 函数导入到当前命名空间。
调用时就不用加前缀了。


✅ 同时导入多个对象

1
from mymodule import greet, say_hello, version

✅ 导入模块中所有公开对象(不推荐)

1
from mymodule import *

这样会导入模块中所有没有以下划线开头的名字。
⚠️ 一般不推荐,因为容易让命名空间变乱。


📦 二、导入包(Package)

假设结构如下:

1
2
3
4
mypackage/
__init__.py
utils.py
models.py

✅ 导入整个包

1
import mypackage

如果在 __init__.py 里写了内容,这样导入时会执行 __init__.py
例如:

1
2
# mypackage/__init__.py
print("Package imported")

✅ 导入包中的子模块

1
2
import mypackage.utils
mypackage.utils.some_function()

✅ 从包中导入子模块或对象

1
2
from mypackage import utils
utils.some_function()

或者更深一层:

1
2
from mypackage.utils import some_function
some_function()

✅ 起别名

1
2
from mypackage import utils as u
u.some_function()

✅ 总结表

语法形式说明调用方式
import mymodule导入模块mymodule.func()
import mymodule as mm导入模块并起别名mm.func()
from mymodule import func只导入某个对象func()
from mymodule import *导入所有对象(不推荐)直接使用名字
import mypackage.utils导入包的子模块mypackage.utils.func()
from mypackage import utils导入子模块到当前命名空间utils.func()
from mypackage.utils import func直接导入函数func()