知行编程网知行编程网  2022-09-20 17:30 知行编程网 隐藏边栏  21 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python创建生成器的两种方法的相关知识,包括创建查询的方法哪两种,以及access创建数据库的两种方法这些编程知识,希望对大家有参考作用。



在 Python 中创建生成器的两种方法



创建生成器方法




方法一

要创建一个生成器,有很多方法。第一种方法很简单,只需将列表推导式的 [ ] 改为 ( )

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

在 Python 中创建生成器的两种方法

运行结果:

在 Python 中创建生成器的两种方法

在 Python 中创建生成器的两种方法

运行结果:

在 Python 中创建生成器的两种方法

生成器保存算法。每次调用next(G),都会计算G的下一个元素的值,直到计算出最后一个元素。当没有更多元素时,将引发 StopIteration 异常。当然,这种对 next() 的不断调用也太变态了。正确的方法是使用 for 循环,因为生成器也是可迭代的对象。所以,在我们创建了一个生成器之后,我们基本上从不调用 next(),我们通过一个 for 循环对其进行迭代,并且不需要关心 StopIteration 异常。


方法2

生成器非常强大。如果计算算法比较复杂,不能用类似于列表生成的for循环来实现,也可以用函数来实现。

例如,在著名的斐波那契数列中,除了第一个和第二个数字之外的任何数字都可以通过将前两个数字相加得到:

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

斐波那契数列不能用列表推导式编写,但很容易用函数打印出来:

在 Python 中创建生成器的两种方法

运行结果:

在 Python 中创建生成器的两种方法

如果仔细观察,可以看到 fib 函数实际上定义了斐波那契数列的计算规则。它可以从第一个元素开始计算任何后续元素。这个逻辑实际上与生成器非常相似。

也就是说,上述函数和生成器仅一步之遥。要将 fib 函数变成生成器,只需将 print(b) 更改为 yield b:

在 Python 中创建生成器的两种方法

运行结果:

在 Python 中创建生成器的两种方法

在上面的 fib 示例中,我们在循环过程中不断调用 yield,这将不断中断。当然,必须为循环设置一个条件才能退出循环,否则会生成一个数字列表。同理,将函数改成生成器后,我们基本不会使用next()来获取下一个返回值,而是直接使用for循环进行迭代:

在 Python 中创建生成器的两种方法

运行结果:

在 Python 中创建生成器的两种方法

但是用for循环调用生成器时,发现无法获取到生成器的return语句的返回值。如果要获取返回值,则必须捕获 StopIteration 错误,并且返回值包含在 StopIteration 的值中:

在 Python 中创建生成器的两种方法

运行结果:

在 Python 中创建生成器的两种方法

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享