【Python快速入门和实践009】Python高级编程

devtools/2024/9/25 11:19:03/

9. 高级Python

   9.1 迭代器与生成器

迭代器:

  • 迭代器是一种遵循迭代器协议的对象,该协议要求对象实现两个特殊的方法:__iter__() 和 __next__()
  • __iter__() 方法返回迭代器自身,而 __next__() 方法返回序列中的下一个值。
  • 当没有更多的值时,__next__() 方法会抛出 StopIteration 异常。

示例代码:

python">class EvenNumberIterator:def __init__(self, numbers):self.numbers = numbersself.index = 0def __iter__(self):return selfdef __next__(self):while self.index < len(self.numbers):current_number = self.numbers[self.index]self.index += 1if current_number % 2 == 0:return current_numberraise StopIteration# 创建一个包含数字的列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]# 创建一个 EvenNumberIterator 实例
even_numbers = EvenNumberIterator(numbers)# 使用 for 循环遍历迭代器
for number in even_numbers:print(number)# 结果
2
4
6
8
10

生成器:

  • 生成器是一种特殊的迭代器,它允许程序员简洁地编写用于遍历数据的函数。
  • 生成器函数使用 yield 关键字而不是 return 来返回值。yield 可以被看作是返回一个值并保存函数的状态,使得下次调用时可以从上次停止的地方继续执行。
  • 生成器函数不需要显式地实现迭代器协议,它们自动支持迭代器接口。

示例代码:假设我们需要一个生成器函数来生成斐波那契数列中的前N个数

python">def fibonacci(n):a, b = 0, 1count = 0while count < n:yield aa, b = b, a + bcount += 1# 指定要生成的斐波那契数的数量
n = 10# 调用生成器函数
fib_gen = fibonacci(n)# 使用 for 循环遍历生成器
for num in fib_gen:print(num)# 结果
0
1
1
2
3
5
8
13
21
34

   9.2 装饰器 (decorators)

装饰器:

  • 装饰器是修改其他函数行为的一种方式,通常用来添加额外的功能或者修改现有功能。
  • 装饰器本质上是一个接受函数作为参数的函数,并返回一个新的函数。
  • 装饰器可以用来实现诸如缓存、日志记录、性能度量等功能。

示例代码:

python">def my_decorator(func):def wrapper(*args, **kwargs):print("Before the function is called.")result = func(*args, **kwargs)print("After the function is called.")return resultreturn wrapper@my_decorator
def say_hello(name):print(f"Hello, {name}!")say_hello("Alice")
# 输出:
# Before the function is called.
# Hello, Alice!
# After the function is called.

   9.3 上下文管理器与 `with` 语句

上下文管理器:

  • 上下文管理器允许用户创建一个环境,在这个环境中某些操作可以安全地执行。
  • 上下文管理器通过实现 __enter__() 和 __exit__() 方法来定义上下文管理器的行为。
  • with 语句用于确保资源的正确清理,即使在发生异常的情况下也是如此。

示例代码:

python">class ManagedFile:def __init__(self, filename):self.filename = filenamedef __enter__(self):self.file = open(self.filename, 'r')return self.filedef __exit__(self, exc_type, exc_val, exc_tb):if self.file:self.file.close()with ManagedFile('example.txt') as f:for line in f:print(line)
# 文件在离开 with 块后会被自动关闭

   9.4 异步编程基础 (asyncio)

异步编程:

  • 异步编程允许程序在等待某些操作完成时执行其他任务。
  • Python 的 asyncio 库提供了实现异步编程的基础设施。
  • 异步编程的关键概念包括协程、事件循环、Future/Task 对象等。

示例代码:

python">import asyncioasync def my_coroutine():print("Start")await asyncio.sleep(1)print("End")async def main():task = asyncio.create_task(my_coroutine())await taskasyncio.run(main())
# 输出:
# Start
# End

   9.5 元编程与反射

元编程:

  • 元编程是指在运行时分析或修改程序的能力。
  • Python 支持动态创建类和修改类属性或方法。
  • 元编程可用于实现框架、插件系统、自动化测试等场景。

反射:

  • 反射是指在运行时检查和修改程序结构的能力。
  • Python 提供了多种工具来实现反射,如 getattrsetattrhasattrdir 等函数。

示例代码:

python">class MyClass:def __init__(self, x, y):self.x = xself.y = yobj = MyClass(10, 20)
print(getattr(obj, 'x'))  # 输出: 10
setattr(obj, 'y', 30)     # 设置 obj.y 为 30
print(hasattr(obj, 'z'))  # 输出: False
print(dir(obj))           # 显示 obj 的所有属性和方法


http://www.ppmy.cn/devtools/94197.html

相关文章

winform中设置DateTimePicker参数为空

在C#中&#xff0c;使用DateTimePicker控件时&#xff0c;您可以将其Value属性设置为null或者DateTime.MinValue来表示没有选定的日期或时间。以下是如何设置默认值为空的示例代码&#xff1a; dateTimePicker1.Value DateTime.MinValue; 或者&#xff0c;如果您希望用户不能…

NPM依赖管理:掌握自动更新行为的策略与实践

引言 在快速发展的JavaScript生态系统中&#xff0c;依赖包的持续更新对于保持项目现代化和安全性至关重要。NPM&#xff08;Node Package Manager&#xff09;作为Node.js的包管理器&#xff0c;提供了一套灵活的机制来管理依赖包的更新。本文将详细介绍如何使用NPM设置包的版…

HikariCP连接池:Possibly consider using a shorter maxLifetime value.

相关的SQL总结&#xff1a; session级别&#xff1a; show variables like %timeout%; mysql的global级别&#xff1a; show global variables like %timeout%; # 对应 mysql 修改配置&#xff08;单位 秒&#xff09; set global wait_timeout300; set global interacti…

【Datawhale X 魔搭 】AI夏令营第四期大模型方向,Task2:头脑风暴会,巧灵脑筋急转弯(持续更新)

队伍名称&#xff1a;巧灵脑筋急转弯 队伍技术栈&#xff1a;python&#xff0c;LLM&#xff0c;RAG&#xff0c;大模型&#xff0c;nlp&#xff0c;Gradio&#xff0c;Vue&#xff0c;java 队友&#xff1a;知唐&#xff08;队长&#xff09;&#xff0c;我真的敲不动…

no space left on device

这个错误消息表明你的设备在尝试下载和保存模型文件时&#xff0c;磁盘空间已满&#xff0c;导致无法继续写入数据。具体地&#xff0c;/usr/share/ollama/.ollama/models/ 目录所在的文件系统没有足够的剩余空间来存储下载的模型文件。 解决方案&#xff1a; 检查磁盘空间&am…

服务器远程管理-Windows远程桌面协议实操

目录 1.因为是在内网所有将操控服务器的计算机与服务器放在同一网段&#xff0c;如果是真实服务器可以直接访问其公网ip 2.启用远程桌面 3.在本地计算机连接远程计算机 4.连接成功 连接远程桌面方式有两种&#xff1a; 方式一&#xff1a;远程桌面通讯协议&#xff08;RDP…

WindowsAPI 查阅笔记:线程、多个线程互同步

1. 线程的创建 HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程安全属性 SIZE_T dwStackSize, //线程堆栈大小 LPTHREAD_START_ROUTINE lpStartAddress, //重要: 线程函数指针 LPVOID lpParameter, //重要: 启动线程函数 DWORD dwC…

c++学习

关键字 continue continue 关键字用于控制循环语句的执行流程。当continue 语句被执行时&#xff0c;它会跳过当前循环迭代中剩余的代码&#xff0c;并立即开始下一次迭代。continue 通常用于 for、while 和 do-while 循环中。 #include <iostream> using namespace s…