函数中返回 generator 时如何控制生成器状态?
生成器函数通过 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 3generator = my_generator()for value in generator: print(value) # 打印生成的值generator.close() # 关闭生成器
实战案例
使用生成器来实现一个简单的范围函数:
def range_generator(start, stop, step=1): current = start while current