学习之什么是生成器

什么是生成器(Generator)

复制代码
1、是一种数据类型能源源不断地生成数据
2、"惰性"特点:一次生成一个值,而不是生成一个序列
3、生成器一定是迭代器比迭代器更简洁

使用生成器表达式创建生成器

python 复制代码
from typing import Generator, Iterator, Iterable

# 列表生成式/列表推导式
num1 = [n for n in range(10)]
print(type(num1), num1)


# 生成器与列表生成式的区别就是[]和()
num2 = (n for n in range(10))
print(type(num2), num2)
print(isinstance(num2, Generator))
print(isinstance(num2, Iterator))
print(isinstance(num2, Iterable))  # 返回True说明生成器就是一种迭代器

运行结果:

定义生成器函数生成生成器

python 复制代码
"""
定义"生成器函数",来创建生成器
(1)生成器函数中使用yield关键字来生成值
(2)调用生成器函数,就返回一个生成器
(3)每对生成器调用一次next函数,
    1、就会返回一次yield后面的值
    2、函数并不会结束,会保存工作现场
    3、再次调用next函数,会从yield关键字后面的代码继续执行
"""


def nums_gen():

    for i in range(10):
        yield i

nums = nums_gen()
print(type(nums))  # generator 调用生成器函数,返回一个生成器
print(next(nums))
for i in nums:
    print(i, end=" ")

运行结果:

python 复制代码
"""
    定义"生成器"函数,来创建生成器
    定义一个裴波拉纳切数列的生成器
    (1)数列 1 1 2 3 5 8 13 。。。。
"""


def fib(n):
    prev, curr = 0, 1
    for _ in range(n):
        yield curr
        prev, curr = curr, prev + curr


fib = fib(20)
for i in fib:
    print(i, end=' ')

运行结果:

相关推荐
哦虎!12 小时前
【JavaEE】网络初识
java
2603_9651481113 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
for_ever_love__13 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
我是人✓13 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
欣栀♡14 小时前
JVM 频繁 Full GC 先看日志括号里的 cause,jstat 的 FGC 在 JDK 8 上会骗人
java·jvm
IT研究室14 小时前
最新计算机毕业设计选题推荐-基于spring boot的葡萄酒文化宣传网站-网站-文档指导-Java-springboot
java·spring boot·课程设计
慧都小项14 小时前
MyEclipse 中创建和测试 JAX-RS REST 接口:从项目配置到 REST Explorer
java·restful·myeclipse·jax-rs
Wang's Blog14 小时前
Java 项目实战: 交友项目 - 入门案例:编写 Dubbo 服务提供者
java·dubbo·交友
秋饼15 小时前
Spring AI 2.0 结构化输出企业级实战:从 BeanOutputConverter 源码到生产级解析容错
java·ai·技术分享·后端开发
摇滚侠15 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记