欢迎来到 Python 基础入门 Day09!在前几天的学习中,我们已经掌握了 Python 的基本语法、数据结构、函数与模块、文件操作、异常处理、面向对象编程、常用内置模块、正则表达式,以及数据可视化。如果你还没有学习之前的内容,可以通过以下链接进行复习:
- Python 基础入门 Day01
- Python 基础入门 Day02
- Python 基础入门 Day03
- Python 基础入门 Day04
- Python 基础入门 Day05
- Python 基础入门 Day06
- Python 基础入门 Day07
- Python 基础入门 Day08
今天,我们将探索 Python 的 高级特性,包括 生成器、装饰器和上下文管理器。这些特性将帮助你编写更简洁、更高效的代码。
目录
- 生成器(Generators)
- 装饰器(Decorators)
- 上下文管理器(Context Managers)
- 综合实例:提升代码复用性
- 小结与练习
一、生成器(Generators)
生成器是一种特殊的迭代器,用于延迟生成数据。它们通过 yield
语句逐步返回值,而不是一次性返回整个数据集,这样可以有效节省内存。
1.1 创建生成器
def simple_generator():
yield 1
yield 2
yield 3
gen = simple_generator()
print(next(gen)) # 输出 1
print(next(gen)) # 输出 2
print(next(gen)) # 输出 3
1.2 使用生成器表达式
生成器表达式与列表推导式类似,但返回的是一个生成器对象,而不是列表:
gen_exp = (x**2 for x in range(5))
print(list(gen_exp)) # 输出 [0, 1, 4, 9, 16]
二、装饰器(Decorators)
装饰器是一种特殊的函数,用于在不改变原函数的基础上扩展其功能。装饰器通常用于日志记录、权限校验和性能测试等场景。
2.1 创建简单装饰器
def my_decorator(func):
def wrapper():
print("执行前")
func()
print("执行后")
return wrapper
@my_decorator
def say_hello():
print("Hello, Python!")
say_hello()
# 输出:
# 执行前
# Hello, Python!
# 执行后
2.2 带参数的装饰器
def repeat(times):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(times):
func(*args, **kwargs)
return wrapper
return decorator
@repeat(3)
def greet(name):
print(f"Hello, {name}!")
greet("Alice")
# 输出:
# Hello, Alice!
# Hello, Alice!
# Hello, Alice!
三、上下文管理器(Context Managers)
上下文管理器用于管理资源的分配和释放,例如文件读写。它们通常使用 with
语句来确保资源正确释放,即使出现异常。
3.1 使用 with
语句打开文件
with open('example.txt', 'w') as file:
file.write("Python 上下文管理器示例")
# 文件自动关闭,无需显式调用 file.close()
3.2 自定义上下文管理器
class MyContext:
def __enter__(self):
print("进入上下文")
return self
def __exit__(self, exc_type, exc_value, traceback):
print("退出上下文")
with MyContext() as context:
print("正在执行任务")
# 输出:
# 进入上下文
# 正在执行任务
# 退出上下文
四、综合实例:提升代码复用性
让我们结合生成器、装饰器和上下文管理器,创建一个高效的日志记录系统。
4.1 日志记录装饰器与生成器
def logger(func):
def wrapper(*args, **kwargs):
print(f"开始执行 {func.__name__} 函数")
result = func(*args, **kwargs)
print(f"{func.__name__} 函数执行完毕")
return result
return wrapper
@logger
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
# 使用生成器生成斐波那契数列
for num in fibonacci(5):
print(num)
4.2 上下文管理器实现日志文件写入
class LogFile:
def __init__(self, filename):
self.filename = filename
def __enter__(self):
self.file = open(self.filename, 'a')
return self.file
def __exit__(self, exc_type, exc_value, traceback):
self.file.close()
with LogFile('log.txt') as file:
file.write("记录日志信息\n")
五、小结与练习
今天我们学习了 Python 的 高级特性,包括 生成器、装饰器和上下文管理器。这些工具可以帮助我们编写更简洁、高效的代码,提高代码的复用性和可读性。
今日练习题:
- 编写一个生成器函数,生成前 N 个偶数。
- 创建一个装饰器,统计函数执行的时间。
- 使用上下文管理器打开文件,并统计文件中的单词数量。
- 结合生成器与装饰器,实现一个可记录执行日志的斐波那契数列生成器。
下一节预告:在 Day10 中,我们将学习 Python 的多线程与多进程编程,让你的程序跑得更快、更高效,敬请期待!
Pingback: Python 基础入门 Day11 - Nas 的天空