当前位置: 首页 > 图灵资讯 > 行业资讯> Python创建生成器的两种方法

Python创建生成器的两种方法

发布时间:2025-11-09 16:40:04

创建生成器方法

方法一

有很多方法可以创建一个生成器。第一种方法很简单,只要生成一个列表[ ]改成( )

创建L和G的区别在于最外层[ ]和( ),L是一个列表,G是一个生成器。我们可以直接打印L的每个元素,但是我们如何打印G的每个元素呢?如果要逐一打印,生成器的下一个返回值可以通过next()函数获得:

qq.png

运行结果:

ww.png

ee.png

运行结果:

rr.png

生成器保存算法,每次调用nextt(G),计算G的下一个元素的值,直到计算到最后一个元素,没有更多的元素,抛出Stopiteration的异常。当然,这种不断呼叫next()太不正常了,正确的方法是使用for循环,因为生成器也是一个可迭代的对象。因此,在我们创建了一个生成器之后,我们基本上永远不会呼叫next(),而是通过for循环迭代它,也不需要关心stopiteration的异常。

相关推荐:Python视频教程

方法2

generator非常强大。假如算法比较复杂,用类似列表生成的for循环无法实现,也可以用函数来实现。

例如,著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任何一个数都可以从前两个数加起来:

1, 1, 2, 3, 5, 8, 13, 21, 34, ...

斐波拉契数列不能以列表生成式书写,但很容易用函数打印出来:

ttt.png

运行结果:

yy.png

仔细观察,我们可以看到fib函数实际上定义了斐波拉契序列的计算规则。我们可以从第一个元素开始计算任何后续元素。这种逻辑实际上与generator非常相似。

也就是说,上面的函数离generator只有一步之遥。要把fib函数变成generator,只需要print(b)改为yield b就可以了:

uu.png

运行结果:

ii.png

在上述fib的例子中,如果我们在循环过程中不断调用yield,我们将继续中断。当然,我们应该为循环设置一个退出循环的条件,否则就会列出一个数字。同样,在将函数更改为generator后,我们基本上从不使用next()获得下一个返回值,而是直接使用for循环进行迭代:

oo.png

运行结果:

pp.png

然而,当使用for循环调用generator时,发现generator的return语句的返回值无法获得。如果你想获得返回值,你必须捕捉stopiteration的错误。返回值包括在stopiteration的value中:

[[.png

运行结果:

]].png

相关推荐:

三分钟看什么是Python生成器

相关文章

Python创建生成器的两种方法

Python创建生成器的两种方法

2025-11-09
Python continue的用法详解

Python continue的用法详解

2025-11-09
python生成器中的send()方法和next()方法

python生成器中的send()方法和next()方法

2025-11-04
Python转义字符及用法

Python转义字符及用法

2025-11-04
Python中的迭代器是什么

Python中的迭代器是什么

2025-11-04
什么是Python中的闭包

什么是Python中的闭包

2025-11-04