2.3 导入

在 Python 编程中,“导入” 就像是打开一个装满工具的抽屉 —— 当我们需要实现特定功能时,不必从零开始编写代码,只需导入相应的模块(包含预设功能的代码集合),就能直接使用其中的工具。比如制作 “题目数据生成器” 时,需要随机生成数字,这就可以借助 Python 自带的random模块;开发 “密码管理器” 时,加密功能可通过cryptography模块实现。本节将带你学习如何导入模块,以及如何利用这些 “现成工具” 提升开发效率。

一、什么是模块?为什么需要导入?

模块是包含 Python 代码的文件(扩展名为.py),里面定义了函数、类、变量等,用于实现特定功能。Python 的强大之处在于拥有丰富的标准库(内置模块)和第三方模块,这些模块就像预制的 “零件”,能帮我们快速搭建程序。

例如,若想生成随机数,手动编写随机算法既复杂又容易出错,而导入random模块后,直接调用random.randint()函数就能轻松实现:


# 导入random模块

import random

# 使用模块中的函数生成1-10之间的随机数

random_num = random.randint(1, 10)

print(f"随机数:{random_num}")

这里的random就是 Python 的标准库模块,通过import语句导入后,我们就能使用它的功能,避免重复造轮子。

二、导入模块的基本语法

Python 提供了多种导入模块的方式,可根据需求选择:

1. 导入整个模块:import 模块名

这是最基础的导入方式,导入后需通过 “模块名.功能名” 的形式使用模块中的功能。例如:


import math # 导入数学运算模块

# 计算平方根(使用math模块的sqrt函数)

result = math.sqrt(16)

print(f"16的平方根是:{result}") # 输出:16的平方根是:4.0

2. 导入模块中的特定功能:from 模块名 import 功能名

若只需使用模块中的某个功能,可直接导入该功能,使用时无需加模块名前缀。例如:


from random import randint # 仅导入random模块的randint函数

# 直接使用randint,无需加random.前缀

num = randint(1, 5) # 生成1-5的随机整数

print(num)

3. 给模块或功能起别名:as关键字

当模块名或功能名较长时,可用as起别名,简化代码。例如:


import datetime as dt # 给datetime模块起别名dt

from random import choice as ch # 给choice函数起别名ch

# 使用别名调用

current_time = dt.datetime.now() # 获取当前时间

print(f"当前时间:{current_time}")

# 从列表中随机选择一个元素

fruits = ["苹果", "香蕉", "橙子"]

selected = ch(fruits)

print(f"随机选中的水果:{selected}")

4. 导入模块中的所有功能:from 模块名 import *

这种方式会导入模块中所有公开的功能,但不推荐使用 —— 可能导致功能名冲突(不同模块的功能重名时,后导入的会覆盖先导入的),且难以区分功能来自哪个模块。例如:


from math import * # 不推荐:导入math模块的所有功能

print(sin(0)) # 可直接使用sin函数(计算正弦值)

三、常用标准库模块及项目应用

Python 标准库包含大量实用模块,无需额外安装即可使用,以下是本书项目中会频繁用到的模块:

1. random:随机数相关功能

在 “题目数据生成器” 中,用于随机生成题目中的数字、运算符等:


import random

# 生成10-20之间的随机整数(用于口算题)

a = random.randint(10, 20)

b = random.randint(10, 20)

# 随机选择加法或减法

operator = random.choice(["+", "-"])

print(f"题目:{a} {operator} {b} = ?")

2. os:与操作系统交互

在 “密码管理器” 中,用于创建存储密码的文件夹、检查文件是否存在:


import os

# 创建名为"passwords"的文件夹(若不存在)

if not os.path.exists("passwords"):

os.makedirs("passwords")

print("密码存储文件夹创建成功")

3. datetime:处理日期和时间

在 “活动管理系统” 中,用于记录活动时间、判断活动是否过期:


from datetime import datetime

# 活动开始时间(字符串转日期对象)

activity_start = datetime.strptime("2023-10-01 09:00", "%Y-%m-%d %H:%M")

# 当前时间

now = datetime.now()

# 判断活动是否已开始

if now > activity_start:

print("活动已开始")

else:

print("活动尚未开始")

4. json:处理 JSON 数据

用于存储和读取结构化数据(如 “活动管理系统” 的报名信息):


import json

# 活动报名信息(字典类型)

sign_up_info = {

"name": "张三",

"phone": "13800138000",

"participate": True

}

# 将信息写入JSON文件

with open("sign_up.json", "w", encoding="utf-8") as f:

json.dump(sign_up_info, f, ensure_ascii=False, indent=2)

print("报名信息已保存")

四、导入第三方模块

除了标准库,Python 还有海量第三方模块(由开发者社区贡献),需通过pip安装后才能导入。例如 “密码管理器” 中用于加密的cryptography模块:

1. 安装第三方模块

打开终端,输入以下命令安装:


pip install cryptography # Windows系统

# 或

pip3 install cryptography # macOS/Linux系统

2. 导入并使用

安装完成后,即可像标准库模块一样导入:


from cryptography.fernet import Fernet

# 生成加密密钥

key = Fernet.generate_key()

cipher_suite = Fernet(key)

# 加密密码(将字符串转为字节后加密)

password = "mypassword123".encode()

encrypted_password = cipher_suite.encrypt(password)

print(f"加密后的密码:{encrypted_password}")

五、常见问题解决
  1. 模块不存在报错(ModuleNotFoundError
  • 若为标准库模块:检查模块名是否拼写错误(如randon应为random)。
  • 若为第三方模块:确保已用pip安装,且安装时使用的 Python 环境与当前运行环境一致。

     2. 功能名冲突:不同模块的功能重名时,后导入的会覆盖先导入的。解决方法:使用 “模块名.功能名” 的方式调用,或起别名区分。例如:


from math import floor

from random import floor # 这里会覆盖math的floor函数

# 正确做法:指定模块名

import math

import random

print(math.floor(3.7)) # 使用math的floor(向下取整)

print(random.floor(3.7)) # 错误:random模块没有floor功能,避免混淆

      3. 导入语句的位置:建议将所有导入语句放在代码开头,方便查看程序依赖的模块。 

导入模块是 Python 编程的核心技能之一,它让我们能站在 “巨人的肩膀” 上开发 —— 借助成熟的模块,无需重复编写基础功能,专注于实现项目的核心逻辑。下一节,我们将学习条件判断,让程序能根据不同情况做出不同反应(比如 “题目数据生成器” 根据难度生成不同范围的数字)。现在,试着导入random模块,编写一段代码随机生成 3 道 10 以内的加法题吧!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐