面试题答案
一键面试对Python生成器进行性能优化的方法
- 减少不必要的计算:在生成器函数内部,确保每次
yield
之前的计算都是必要的。避免重复计算相同的结果,可以将一些不变的计算提前到生成器函数外部。 - 使用
yield from
:它可以简化嵌套生成器的代码,并在一定程度上提高性能。 - 避免在生成器中创建大量中间数据结构:生成器的优势在于按需生成数据,若在生成器函数中创建大型列表、字典等中间数据结构,会消耗大量内存,违背生成器的设计初衷。
yield from
语句的作用
- 简化嵌套生成器代码:当有多层嵌套的生成器时,使用
yield from
可以避免手动迭代内层生成器。 - 传递异常和返回值:
yield from
会将调用方的异常直接传递给子生成器,并将子生成器的返回值作为yield from
表达式的值返回给调用方。
示例
# 传统方式处理嵌套生成器
def sub_generator():
for i in range(3):
yield i
def outer_generator():
sub = sub_generator()
for value in sub:
yield value
gen = outer_generator()
for item in gen:
print(item)
# 使用yield from优化
def sub_generator():
for i in range(3):
yield i
def outer_generator():
yield from sub_generator()
gen = outer_generator()
for item in gen:
print(item)
在上述示例中,使用yield from
后,outer_generator
函数代码结构更加简洁。同时,yield from
在传递异常和返回值等方面也有更优的表现,在处理复杂生成器嵌套场景时能提高代码的可读性与执行效率。