Python 基础入门 Day09

Python 基础入门 Day09

欢迎来到 Python 基础入门 Day09!在前几天的学习中,我们已经掌握了 Python 的基本语法、数据结构、函数与模块、文件操作、异常处理、面向对象编程、常用内置模块、正则表达式,以及数据可视化。如果你还没有学习之前的内容,可以通过以下链接进行复习:

今天,我们将探索 Python 的 高级特性,包括 生成器、装饰器和上下文管理器。这些特性将帮助你编写更简洁、更高效的代码。

目录

  1. 生成器(Generators)
  2. 装饰器(Decorators)
  3. 上下文管理器(Context Managers)
  4. 综合实例:提升代码复用性
  5. 小结与练习

一、生成器(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 的 高级特性,包括 生成器、装饰器和上下文管理器。这些工具可以帮助我们编写更简洁、高效的代码,提高代码的复用性和可读性。

今日练习题:

  1. 编写一个生成器函数,生成前 N 个偶数。
  2. 创建一个装饰器,统计函数执行的时间。
  3. 使用上下文管理器打开文件,并统计文件中的单词数量。
  4. 结合生成器与装饰器,实现一个可记录执行日志的斐波那契数列生成器。

下一节预告:在 Day10 中,我们将学习 Python 的多线程与多进程编程,让你的程序跑得更快、更高效,敬请期待!

1 Comment

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注