Python 基础入门 Day09

97次阅读
一条评论

共计 2380 个字符,预计需要花费 6 分钟才能阅读完成。

欢迎来到 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 的多线程与多进程编程,让你的程序跑得更快、更高效,敬请期待!

正文完
 0
评论(一条评论)