生成器函数通过 send() 发送值、throw() 处理异常和 close() 关闭生成器来控制其状态。可将其用于发送值、接收异常和释放资源。一个实战案例展示了如何使用生成器函数实现范围函数。
在生成器函数中控制生成器状态
生成器函数是一种特殊的函数,它可以暂停执行并返回中间值,然后在稍后继续执行。控制生成器状态对于管理生成器的行为和防止错误非常重要。
发送值给生成器
要向生成器发送值,可以使用 send() 方法。这将向生成器发送给定的值,并继续执行。生成器会将接收到的值存储在其 .value 属性中。
代码示例:
点击下载“修复打印机驱动工具”;
def my_generator():
x = yield
print(f"Received value: {x}")
generator = my_generator()
generator.send(10) # 发送值 10 给生成器
从生成器接收异常
有时,生成器可能在执行期间抛出异常。要处理这些异常,可以使用 throw() 方法。这会向生成器抛出一个异常,生成器可以对其进行处理。
代码示例:
点击下载“修复打印机驱动工具”;
def my_generator():
try:
x = yield
print(f"Received value: {x}")
except Exception as e:
print(f"Error occurred: {e}")
generator = my_generator()
generator.send(10) # 发送值 10 给生成器
try:
generator.throw(ValueError("Invalid value")) # 抛出异常
except ValueError as e:
print(f"Caught exception: {e}")
关闭生成器
完成生成器后,可以将其关闭以释放资源。要关闭生成器,可以使用 close() 方法。
代码示例:
点击下载“修复打印机驱动工具”;
def my_generator():
yield 1
yield 2
yield 3
generator = my_generator()
for value in generator:
print(value) # 打印生成的值
generator.close() # 关闭生成器
实战案例
使用生成器来实现一个简单的范围函数:
def range_generator(start, stop, step=1):
current = start
while current < stop:
yield current
current += step
for number in range_generator(1, 11, 2):
print(number) # 打印 1、3、5、7、9