Python高级用法:生成器(generator)

生成器(generator)

生成器是一种返回生成序列的方法,与直接使用列表等方式返回序列的方式不同的是,他的生成可以是无限的。

生成器可以与next搭配使用,可以被看作是一种特殊的迭代器。

yield语句

yield一般与循环相配合使用,我们以斐波那契数列为例构建生成器

注:斐波那契数列是一个特殊的增数列,后一个数是前两个数之和,斐波那契数列如下:1,1,2,3,5, 8,...

python 复制代码
def fibonacci():
	a, b = 0, 1
	while True:
		yield b
		a, b = b, a + b

在代码中展示了一个在死循环中生成斐波那契数列的功能,使用yield进行返回。使用next可以获取下一个斐波那契数列的数字。

组合使用生成器

不同的生成器可以组合使用,但这种用法一般要求数列有限。

下面我们创建一个计算平方的函数和一个值+1的函数

python 复制代码
def power(values):
	for value in values:
		yield value ** 2
python 复制代码
def add(values):
	for value in values:
		yield value + 1

下面我们使用前面介绍过的列表推导生成方式生成一个由数字组成的序列

python 复制代码
values = [i for i in range(5)]

生成器单个使用效果如下:

合并使用效果如下

这样的结果就是先+1再平方

相关推荐
染指11101 分钟前
19.LangChain框架7-LangChain1.0版本使用Agent(中间件实例)
人工智能·python·机器学习·langchain·agent·rag
Shadow(⊙o⊙)1 分钟前
mkfifo()命名管道-FIFO客户端 服务端模拟。*System V消息队列、信号量(信号灯)。
linux·运维·服务器·开发语言·c++
zfoo-framework5 分钟前
kotlin中体会到一些比较好用的点
android·开发语言·kotlin
赵谨言5 分钟前
基于C#的在线编码与自动化测试全栈Web平台的设计与实现
开发语言·前端·c#
装不满的克莱因瓶7 分钟前
从梯度下降到 Adam 优化器:掌握神经网络参数优化的核心原理
人工智能·python·深度学习·神经网络·机器学习·计算机视觉·ai
牛油果子哥q12 分钟前
C++六大默认成员函数深度精讲:构造/析构/拷贝/赋值/移动构造/移动赋值、编译器生成规则、深浅拷贝终极坑点与工程实战
开发语言·c++
Shadow(⊙o⊙)14 分钟前
System V共享内存详解,shm系列接口,三种共享内存删除机制。System V通信缺点分析
linux·运维·服务器·开发语言·网络·c++
ZC跨境爬虫16 分钟前
跟着 MDN 学JavaScript day_4:如何存储你需要的信息——变量
开发语言·前端·javascript·ui·ecmascript
1892280486116 分钟前
NV077固态MT29F16T08ESLCHL6-QAES:C
c语言·开发语言·性能优化
小小de风呀17 分钟前
de风——【从零开始学C++】(十三):优先级队列 priority_queue 全解析 & 仿函数入门
开发语言·c++