📅  最后修改于: 2023-12-03 15:30:52.351000             🧑  作者: Mango
在Python中,生成器函数可以被用来产生一个序列包含某些特定项,而不需要在内存中储存整个序列。
生成器函数是以“yield”关键字来定义的函数,它可以在函数运行期间多次产生结果,每次结果都是运行函数时生成器函数中遇到的下一个“yield”语句处产生的值。
下面是一个简单的生成器函数示例,它将从0开始的整数序列进行平方的运算,并返回平方后的结果:
def square_numbers(n):
for i in range(n):
yield i**2
print(list(square_numbers(5))) # 输出 [0, 1, 4, 9, 16]
在上述示例中,使用yield
关键字取代了return
语句,函数会在每一次迭代时生成新的平方值。由于此时返回的是生成器对象,而不是实际的序列,所以需要使用list
函数将其转换为列表。
生成器函数在处理大量的数据或者需要节省内存的应用场景中非常有用。
除了yield
语句,生成器函数中还可以使用一些控制语句,如send()
和close()
方法,用以控制函数的行为。下面是示例代码:
def square_odd_numbers(n):
i = 0
while i < n:
if i % 2 == 1:
square = (yield i**2)
print(f"Square of {i} is {square}")
i += 1
sq = square_odd_numbers(5)
next(sq)
print(sq.send(16))
sq.close()
在上述示例中,使用生成器函数计算一个若干奇数的平方,并输出中间步骤。运行结果如下:
1
Square of 1 is 16
9
Square of 3 is None
再次提醒,生成器函数适用于有大量数据或内存限制的应用场景,可以较好地解决这些问题。