Python生成器函数的用法和实现原理
Python生成器函数是一种特殊的函数,它能在被调用时生成一个迭代器,并产生序列式的数据流,可以在循环中通过 next() 方法进行迭代使用,也可以通过 for 循环来遍历序列。
生成器函数主要的作用是能够很轻松地生成大量数据,而不需要占用过多的内存空间,这是生成器函数的优点之一。
下面深入探究Python生成器函数的用法和实现原理。
1.生成器函数的使用方法
Python生成器函数使用方法十分简单,我们只需要在函数体中使用 yield 关键字而不是 return 就可以了。
def generator():
for i in range(5):
yield i
g = generator()
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
上面的代码中,我们定义了一个名为 generator 的生成器函数,通过 for 循环将 yield 输出,每次调用 __next__() 方法时,就可以返回一个数值。所以输出的结果将会是:
0
1
2
3
4
2.实现原理
Python生成器函数的实现原理是通过迭代器实现的。在生成器函数中使用 yield 方法生成迭代器使得生成器函数在函数体中返回一个迭代器,在调用生成器函数的时候不会立刻执行函数体中的代码,而是返回一个生成器对象,从而将生成器函数变成了可迭代对象。当使用了生成器对象的 __next__() 方法时,就会调用生成器函数去执行相应的代码,并返回 yield 语句后面的值。
Python生成器函数的实现原理可以通过下面的代码来理解:
def generator():
print('start')
for i in range(5):
yield i
print('end')
g = generator()
print('start')
print(next(g)) # 输出 0
print(next(g)) # 输出 1
print(next(g)) # 输出 2
print(next(g)) # 输出 3
print(next(g)) # 输出 4
print('end')
上面的代码中,我们首先定义了一个生成器函数 generator(),通过在函数体中使用 yield 关键字返回一个迭代器。然后我们通过调用生成器函数生成生成器对象 g,并使用 next(g) 方法依次输出 g 中的相应值。
输出的结果如下:
start
start
0
1
2
3
4
end
从输出结果可以看出,调用生成器函数时,只有 start 被输出,因为生成器函数只是生成了一个迭代器,没有执行函数体中的代码。而使用了 next(g) 方法后,才会在函数体中开始执行语句并输出相应的结果。当所有值都输出完后,函数体中的 end 数据也被输出。
总结
Python生成器函数是一种无限制的数据生成器,可以在使用函数方法的同时,能够很快生成大量数据并避免占用过多的内存空间。通过 yield 关键字返回迭代器,使得在函数体中执行语句之前,先创建一个生成器对象。使用 next() 方法来依次迭代生成器对象,并输出函数体语句的结果。在使用 for 循环时,自动调用生成器的 __next__() 方法遍历所有数据。
