Python编程实战 - 函数与模块化编程 - 导入与使用模块

在实际编程中,我们经常需要将功能拆分成多个文件或引用别人写好的功能模块,以提高代码的复用性与可维护性。这种"功能拆分与复用"的机制,就是 Python 模块化编程 的核心。模块是 Python 程序结构的重要组成部分,通过导入模块,我们可以轻松使用各种功能,而无需重复造轮子。


一、什么是模块

模块(Module) 是一个包含 Python 定义和语句的文件,文件名以 .py 结尾。简单来说,一个 .py 文件就是一个模块。

比如,我们创建一个名为 mymath.py 的文件,内容如下:

python 复制代码
def add(a, b):
    return a + b

def sub(a, b):
    return a - b

这时,我们就定义了一个名为 mymath 的模块,其中包含了两个函数 add()sub()


二、导入模块的方式

Python 提供了多种导入模块的方式,根据需求灵活使用。

1. 使用 import 导入整个模块

python 复制代码
import mymath

print(mymath.add(3, 5))
print(mymath.sub(10, 4))

这里通过 模块名.函数名 的方式调用函数。 这种方式清晰明了,但每次使用函数时都要加上模块名前缀。


2. 使用 from...import... 导入部分功能

python 复制代码
from mymath import add

print(add(3, 5))

这样我们就可以直接使用 add(),无需加上模块名前缀。 如果需要导入多个函数,可以写成:

python 复制代码
from mymath import add, sub

3. 导入模块中的所有内容

python 复制代码
from mymath import *

这样可以直接使用模块中的所有函数和变量,但不推荐这样使用,因为容易与当前命名空间的变量冲突。


4. 使用别名简化模块名

有时候模块名很长,我们可以使用 as 给模块取别名:

python 复制代码
import mymath as m

print(m.add(4, 6))

这在使用第三方库(如 numpypandas)时非常常见:

python 复制代码
import numpy as np
import pandas as pd

三、常用的 Python 内置模块

Python 自带了丰富的标准库,我们可以直接导入使用,无需额外安装。

1. math 数学模块

python 复制代码
import math

print(math.sqrt(16))   # 开平方
print(math.pi)         # 圆周率

2. random 随机模块

python 复制代码
import random

print(random.randint(1, 10))  # 生成 1 到 10 的随机整数
print(random.choice(['apple', 'banana', 'pear']))  # 随机选择一个元素

3. datetime 日期时间模块

python 复制代码
import datetime

now = datetime.datetime.now()
print(now)

四、自定义模块的导入

假设我们有如下文件结构:

css 复制代码
project/
│
├── main.py
└── utils.py

utils.py 内容:

python 复制代码
def greet(name):
    print(f"Hello, {name}!")

main.py 内容:

python 复制代码
import utils

utils.greet("Python")

运行 main.py 时,Python 会自动找到同一目录下的 utils.py 并执行导入。


五、模块的搜索路径

当你导入一个模块时,Python 会按照以下顺序查找模块:

  1. 当前程序所在目录;
  2. 系统环境变量 PYTHONPATH 指定的路径;
  3. Python 安装路径下的标准库目录。

你可以通过以下代码查看模块的搜索路径:

python 复制代码
import sys
print(sys.path)

如果你想临时添加搜索路径:

python 复制代码
import sys
sys.path.append("/path/to/my/modules")

六、导入模块时执行的内容

当你第一次导入模块时,Python 会执行模块文件中的所有顶层代码。 比如:

python 复制代码
# mymodule.py
print("模块正在被加载...")
a = 10

当执行:

python 复制代码
import mymodule

会输出:

erlang 复制代码
模块正在被加载...

但再次导入同一个模块时,Python 不会重新执行,因为模块会被缓存。


七、包(Package)的概念

当一个目录下包含一个 __init__.py 文件时,这个目录就成为一个包(Package),可以包含多个模块。

目录结构如下:

markdown 复制代码
mypackage/
│
├── __init__.py
├── math_utils.py
└── string_utils.py

使用时可以这样导入:

python 复制代码
from mypackage import math_utils
math_utils.add(3, 5)

或者:

python 复制代码
from mypackage.math_utils import add
add(3, 5)

八、总结

  • 模块是 .py 文件,包是包含 __init__.py 的目录;
  • import 导入整个模块,from...import... 导入部分内容;
  • 模块可复用、可组织代码结构;
  • 常用模块有:mathrandomdatetimeossys 等;
  • Python 导入模块时,会从当前目录、PYTHONPATH 和系统库路径中查找。

结语: 模块化编程是 Python 的核心思想之一。它让代码更有组织、更易维护、更易复用。熟练掌握模块与包的使用,是从"会写 Python"到"精通 Python"迈出的关键一步。

相关推荐
Tony Bai24 分钟前
再见,丑陋的 container/heap!Go 泛型堆 heap/v2 提案解析
开发语言·后端·golang
阔皮大师1 小时前
INote轻量文本编辑器
java·javascript·python·c#
寻找奶酪的mouse1 小时前
30岁技术人对职业和生活的思考
前端·后端·年终总结
小法师爱分享1 小时前
StickyNotes,简单便签超实用
java·python
深蓝电商API1 小时前
处理字体反爬:woff字体文件解析实战
爬虫·python
开源技术1 小时前
Claude Opus 4.6 发布,100万上下文窗口,越贵越好用
人工智能·python
梦想很大很大1 小时前
使用 Go + Gin + Fx 构建工程化后端服务模板(gin-app 实践)
前端·后端·go
毅炼1 小时前
Java 基础常见问题总结(4)
java·后端
张3蜂1 小时前
深入理解 Python 的 frozenset:为什么要有“不可变集合”?
前端·python·spring
皮卡丘不断更1 小时前
手搓本地 RAG:我用 Python 和 Spring Boot 给 AI 装上了“实时代码监控”
人工智能·spring boot·python·ai编程