【第一章:人工智能基础】01.Python基础及常用工具包-(2)Python函数与模块
第一章 人工智能基础
第一部分:Python基础及常用工具包
第二节:Python函数与模块
内容:定义和使用函数,模块的导入与使用,常见标准库
一、引言
函数和模块是编程中复用代码、组织结构的关键。在人工智能项目中,我们常常需要将代码封装为函数,或者使用第三方模块来处理数据、训练模型等。本节将介绍如何定义函数、导入模块,以及 Python 中常见的标准库。
二、函数的定义与使用
1. 定义函数
使用 def
关键字来定义函数:
def greet(name):print("Hello, " + name)
2. 调用函数
greet("Alice")
3. 带返回值的函数
def add(a, b):return a + bresult = add(3, 5)
print(result) # 输出:8
4. 参数类型
-
默认参数:
def greet(name="World"):print("Hello, " + name)greet() # 输出:Hello, World
greet("Python") # 输出:Hello, Python
-
可变参数(
*args
,**kwargs
):
def print_all(*args):for arg in args:print(arg)print_all(1, 2, 3)
三、模块的导入与使用
Python 模块是以 .py
文件存在的可复用脚本。我们可以导入自己编写的模块或 Python 提供的标准模块。
1. 导入模块的几种方式
import math
print(math.sqrt(16)) # 输出:4.0
from math import sqrt
print(sqrt(25)) # 输出:5.0
import math as m
print(m.pi) # 输出:3.141592653589793
2. 自定义模块导入
假设有一个文件 mymath.py
,内容如下:
# mymath.py
def square(x):return x * x
在主程序中可以导入使用:
import mymath
print(mymath.square(4)) # 输出:16
四、常见标准库简介
Python 标准库提供了很多实用模块,以下是人工智能开发中常见的一些:
模块名 | 作用 |
---|---|
math | 数学运算,如开平方、三角函数等 |
random | 随机数生成 |
datetime | 日期时间处理 |
os | 与操作系统交互(如文件操作) |
sys | 系统相关参数和函数 |
json | JSON 格式解析与生成 |
re | 正则表达式处理 |
collections | 提供更丰富的数据结构,如 Counter , defaultdict 等 |
1. math
— 数学运算
常用方法
方法 | 功能 |
---|---|
math.sqrt(x) | 计算平方根 |
math.pow(x, y) | 计算 x 的 y 次幂 |
math.sin(x) / math.cos(x) / math.tan(x) | 三角函数,参数为弧度 |
math.factorial(n) | 计算阶乘(n 必须为非负整数) |
math.ceil(x) | 向上取整 |
math.floor(x) | 向下取整 |
math.pi | π 常量 |
示例
import mathprint(math.sqrt(16)) # 输出:4.0
print(math.pow(2, 3)) # 输出:8.0
print(math.sin(math.pi/2)) # 输出:1.0
print(math.factorial(5)) # 输出:120
print(math.ceil(3.2)) # 输出:4
print(math.floor(3.8)) # 输出:3
print(math.pi) # 输出:3.141592653589793
2. random
— 随机数生成
常用方法
方法 | 功能 |
---|---|
random.random() | 返回 0 到 1 之间的随机浮点数 |
random.randint(a, b) | 返回区间 [a, b] 的随机整数 |
random.choice(seq) | 从序列中随机选取一个元素 |
random.shuffle(list) | 将列表随机打乱(原地修改) |
random.sample(population, k) | 从总体中随机抽取 k 个不重复元素 |
示例
import randomprint(random.random()) # 输出:0 到 1 之间的随机数
print(random.randint(1, 10)) # 输出:1 到 10 的随机整数
print(random.choice(['A', 'B', 'C'])) # 随机选一个字符
lst = [1, 2, 3, 4, 5]
random.shuffle(lst)
print(lst) # 输出打乱后的列表
print(random.sample(lst, 3)) # 从列表随机抽取3个元素
3. datetime
— 日期时间处理
常用类和方法
类/方法 | 功能 |
---|---|
datetime.datetime.now() | 获取当前日期和时间 |
datetime.date.today() | 获取当前日期 |
datetime.datetime.strptime(date_string, format) | 字符串转时间对象 |
datetime.datetime.strftime(format) | 时间对象转字符串 |
timedelta(days=, hours=, minutes=) | 时间间隔,用于加减时间 |
示例
from datetime import datetime, date, timedeltanow = datetime.now()
print(now) # 当前时间,格式如 2025-06-06 14:30:00.123456today = date.today()
print(today) # 当前日期,格式如 2025-06-06# 字符串转时间对象
dt = datetime.strptime("2025-06-06 12:00", "%Y-%m-%d %H:%M")
print(dt)# 时间对象转字符串
print(now.strftime("%Y/%m/%d %H:%M:%S"))# 计算未来时间
future = now + timedelta(days=7)
print(future)
4. os
— 操作系统相关功能
常用方法
方法 | 功能 |
---|---|
os.getcwd() | 获取当前工作目录 |
os.listdir(path) | 列出指定目录下的文件和文件夹 |
os.mkdir(path) | 创建新目录 |
os.remove(path) | 删除文件 |
os.rename(src, dst) | 重命名文件或目录 |
os.path.exists(path) | 判断路径是否存在 |
os.path.join(path1, path2, ...) | 拼接路径,适应不同操作系统 |
示例
import osprint(os.getcwd()) # 输出当前目录路径
print(os.listdir('.')) # 列出当前目录文件和文件夹if not os.path.exists('test_dir'):os.mkdir('test_dir') # 创建新目录os.rename('test_dir', 'new_dir') # 重命名目录# 删除文件示例(请确保文件存在)
# os.remove('some_file.txt')path = os.path.join('new_dir', 'file.txt')
print(path) # 输出类似 new_dir/file.txt
5. json
— JSON 数据解析与生成
常用方法
方法 | 功能 |
---|---|
json.dumps(obj) | 将 Python 对象编码成 JSON 字符串 |
json.loads(json_str) | 将 JSON 字符串解码成 Python 对象 |
json.dump(obj, file) | 将 Python 对象写入文件(JSON 格式) |
json.load(file) | 从文件读取 JSON 并转换为 Python 对象 |
示例
import jsondata = {"name": "Alice", "age": 25, "scores": [90, 85, 88]}# 转成 JSON 字符串
json_str = json.dumps(data)
print(json_str)# 从 JSON 字符串解析
data2 = json.loads(json_str)
print(data2['name'])# 写入文件
with open('data.json', 'w') as f:json.dump(data, f)# 从文件读取
with open('data.json', 'r') as f:content = json.load(f)print(content)
6. re
— 正则表达式
常用函数
函数 | 功能 |
---|---|
re.match(pattern, string) | 从字符串开头匹配正则表达式 |
re.search(pattern, string) | 在字符串中搜索匹配的第一个位置 |
re.findall(pattern, string) | 返回所有匹配的字符串列表 |
re.sub(pattern, repl, string) | 替换匹配字符串 |
示例
import retext = "My phone number is 123-456-7890."# 搜索电话号码
match = re.search(r'\d{3}-\d{3}-\d{4}', text)
if match:print("Found phone number:", match.group())# 查找所有数字
numbers = re.findall(r'\d+', text)
print(numbers) # ['123', '456', '7890']# 替换数字为 '*'
new_text = re.sub(r'\d', '*', text)
print(new_text) # My phone number is ***-***-****
7. collections
— 额外的数据结构
常用类
类 | 功能 |
---|---|
Counter | 计数器,统计元素出现次数 |
defaultdict | 带默认值的字典 |
namedtuple | 命名元组,类似结构体 |
deque | 双端队列,支持高效的头尾插入删除 |
示例
from collections import Counter, defaultdict, namedtuple, deque# Counter 统计字符出现频率
c = Counter("abracadabra")
print(c) # Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})# defaultdict,访问不存在的键返回默认值
dd = defaultdict(int)
dd['key'] += 1
print(dd['key']) # 输出:1# namedtuple 定义简单类
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)
print(p.x, p.y)# deque 双端队列
d = deque([1, 2, 3])
d.appendleft(0) # 左端插入
d.append(4) # 右端插入
print(d) # deque([0, 1, 2, 3, 4])
五、小结
本节内容包括:
-
如何定义和调用函数(包括返回值、默认参数、可变参数)
-
模块的导入与使用方式(标准模块、自定义模块)
-
Python 中常见的标准库及其用途
掌握函数和模块有助于你写出结构清晰、可维护的代码。