python3
·
32. 高级函数与闭包、模块实战
32.1 闭包(Closure)
- 讲解:闭包是函数内部定义的函数,可以访问外部函数的局部变量,保留状态。
def outer(x):
def inner(y):
return x + y
return inner
f = outer(10)
print(f(5)) # 输出 15
print(f(20)) # 输出 30
- 关键点总结
- 内部函数访问外部函数变量
- 外部函数返回内部函数,形成闭包
- 闭包可保持状态,适合计数器、缓存等
32.2 匿名函数 lambda
- 讲解:
lambda表达式创建匿名函数,用于简单逻辑,常与高阶函数结合。
# 普通函数
def add(a, b):
return a + b
# 匿名函数
f = lambda a, b: a + b
print(f(10, 20)) # 30
# 与 map, filter, reduce 配合
nums = [1,2,3,4,5]
squared = list(map(lambda x: x**2, nums))
print(squared) # [1,4,9,16,25]
- 关键点总结
lambda 参数: 表达式- 无需
return,表达式结果即返回 - 简洁、适合短小函数
32.3 高阶函数
- 讲解:函数可以作为参数传入或返回,增强灵活性。
def apply(func, value):
return func(value)
def square(x):
return x * x
print(apply(square, 5)) # 25
- 关键点总结
- 函数是对象,可赋值、传参
- 高阶函数可实现回调、策略模式
- 与
lambda、闭包结合使用更灵活
32.4 模块实战:自定义工具模块
- 讲解:将常用函数封装到模块,提高代码复用。
# 文件 math_utils.py
def add(a, b):
return a + b
def sub(a, b):
return a - b
def mul(a, b):
return a * b
def div(a, b):
return a / b
# 主程序 main.py
from math_utils import add, sub
print(add(10, 5))
print(sub(10, 5))
- 关键点总结
- 模块功能单一,便于维护
- 文档字符串说明模块功能
- 导入模块使用
import或from … import … - 避免循环导入
32.5 包实战
- 讲解:将多个模块组织为包,提升项目结构清晰度。
project/
├── mypackage/
│ ├── __init__.py
│ ├── math_utils.py
│ └── string_utils.py
└── main.py
# main.py
from mypackage.math_utils import add
from mypackage.string_utils import reverse
print(add(2,3))
print(reverse("Python"))
- 关键点总结
- 包 = 目录 +
__init__.py - 模块功能分类存放
- 使用包导入模块,使项目更规范
- 包 = 目录 +
33. 综合练习与实战案例
33.1 实战案例一:学生信息管理系统
- 讲解:使用类和列表管理学生信息,实现增删改查功能。
class Student:
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score
def show(self):
print(f"姓名:{self.name}, 年龄:{self.age}, 成绩:{self.score}")
# 学生列表
students = []
# 添加学生
students.append(Student("小明", 18, 90))
students.append(Student("小红", 19, 95))
# 修改学生成绩
students[0].score = 92
# 删除学生
students.pop(1)
# 遍历显示
for stu in students:
stu.show()
- 关键点总结
- 使用类封装学生信息
- 列表管理多条数据
- 增删改查操作结合对象方法
33.2 实战案例二:文件数据统计
- 讲解:读取文本文件,统计单词出现次数,并写入新文件。
from collections import Counter
# 读取文件
with open('sample.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 单词统计
words = text.split()
cnt = Counter(words)
# 写入结果
with open('result.txt', 'w', encoding='utf-8') as f:
for word, count in cnt.items():
f.write(f"{word}: {count}\n")
print("统计完成!")
- 关键点总结
- 文件操作:读取与写入
Counter统计词频- 可用于日志分析、文本处理
33.3 实战案例三:简单计算器
- 讲解:命令行交互实现加减乘除功能,使用函数组织。
def add(a, b):
return a + b
def sub(a, b):
return a - b
def mul(a, b):
return a * b
def div(a, b):
return a / b
while True:
op = input("请输入操作(+,-,*,/)或 q 退出: ")
if op == 'q':
break
a = float(input("输入第一个数字: "))
b = float(input("输入第二个数字: "))
if op == '+':
print(add(a, b))
elif op == '-':
print(sub(a, b))
elif op == '*':
print(mul(a, b))
elif op == '/':
print(div(a, b))
else:
print("无效操作")
- 关键点总结
- 使用函数封装功能
- 命令行输入控制流程
- 循环与条件控制实现交互
33.4 实战案例四:正则表达式应用
- 讲解:从文本中提取手机号、邮箱和日期,实现数据清洗功能。
import re
text = """
姓名: 张三, 手机: 13812345678, 邮箱: zhangsan@example.com, 日期: 2023-05-08
姓名: 李四, 手机: 13987654321, 邮箱: lisi@example.com, 日期: 2023-05-07
"""
# 手机号
phones = re.findall(r'1[3-9]\d{9}', text)
print("手机号:", phones)
# 邮箱
emails = re.findall(r'\w+@[\w\.]+', text)
print("邮箱:", emails)
# 日期
dates = re.findall(r'\d{4}-\d{2}-\d{2}', text)
print("日期:", dates)
- 关键点总结
re.findall提取匹配数据- 常用于数据清洗、日志分析
- 正则表达式技巧:字符集、量词、分组
33.5 综合总结
- 面向对象、模块、标准库、文件操作、正则表达式、异常处理,结合实战案例可以:
- 高效管理和处理数据
- 提高代码复用性和可维护性
- 为全栈 Python 开发打下基础
34. Python 高级进阶技巧总结
34.1 列表推导式与生成式
- 讲解:列表推导式简洁创建列表,生成器表达式节省内存。
# 列表推导式
nums = [x**2 for x in range(10) if x % 2 == 0]
print(nums) # [0, 4, 16, 36, 64]
# 嵌套列表推导式
matrix = [[i*j for j in range(3)] for i in range(3)]
print(matrix)
# 生成器表达式
gen = (x**2 for x in range(10))
for n in gen:
print(n, end=" ")
- 关键点总结
- 简洁、可读性高
- 推导式支持条件、嵌套
- 生成器表达式惰性计算,节省内存
34.2 上下文管理器 with
- 讲解:
with自动管理资源,适用于文件、数据库连接、网络等。
with open('example.txt', 'w') as f:
f.write("上下文管理器示例")
# 自定义上下文管理器
class MyContext:
def __enter__(self):
print("进入上下文")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("退出上下文")
with MyContext() as ctx:
print("执行代码块")
- 关键点总结
- 自动释放资源,避免忘记关闭
__enter__与__exit__控制上下文- 可用于文件、网络、锁等管理
34.3 装饰器进阶
- 讲解:装饰器可组合使用,实现权限控制、日志、缓存等功能。
def decorator1(func):
def wrapper(*args, **kwargs):
print("装饰器1前")
result = func(*args, **kwargs)
print("装饰器1后")
return result
return wrapper
def decorator2(func):
def wrapper(*args, **kwargs):
print("装饰器2前")
result = func(*args, **kwargs)
print("装饰器2后")
return result
return wrapper
@decorator1
@decorator2
def greet(name):
print(f"Hello, {name}")
greet("小明")
- 关键点总结
- 装饰器可多层嵌套
- 内层先执行,外层后执行
- 可用于日志、权限检查、缓存、性能统计
34.4 生成器与迭代器进阶
- 讲解:生成器、迭代器结合高阶函数处理大数据流。
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
# 使用生成器
for num in fibonacci(10):
print(num, end=" ")
# 使用 itertools 高级迭代器
import itertools
nums = [1,2,3]
for item in itertools.cycle(nums):
print(item, end=" ") # 无限循环示例,注意控制结束
break
- 关键点总结
yield节省内存,适合大数据itertools提供高效迭代工具- 可结合生成器表达式实现流式计算
34.5 综合应用技巧
-
讲解
:在全栈开发中,高级技巧可以组合使用:
- 列表推导式处理数据
- 装饰器控制函数权限或日志
- 上下文管理器安全管理资源
- 生成器与迭代器处理大数据或流式计算
# 组合示例
def log_decorator(func):
def wrapper(*args, **kwargs):
print(f"调用函数: {func.__name__}")
return func(*args, **kwargs)
return wrapper
@log_decorator
def process_data(data):
return [x**2 for x in data if x % 2 == 0]
result = process_data(range(10))
print(result)
- 关键点总结
- 多种高级功能组合提高代码效率和安全
- 全栈开发中常用
- 提前规划代码结构,模块化、可复用性高
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)