当前位置: 首页 > news >正文

学习之什么是生成器

什么是生成器(Generator)

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

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

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说明生成器就是一种迭代器

运行结果:
在这里插入图片描述

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

"""
定义“生成器函数”,来创建生成器
(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=" ")

运行结果:
在这里插入图片描述

"""
    定义“生成器”函数,来创建生成器
    定义一个裴波拉纳切数列的生成器
    (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=' ')

运行结果:
在这里插入图片描述

相关文章:

  • 农牧场可视化管理:精准监测与优化运营
  • Python | 第六章节 | 控制结构
  • 我把101篇公众号文章喂给了AI,终于,「小爱」可以为我代言了!
  • 【Kubernetes】日志平台EFK+Logstash+Kafka【理论】
  • 【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)
  • MySQL进阶:深入理解数据约束与优化查询
  • 从 Oracle 集群到单节点环境(详细记录一次数据迁移过程)之三:在目标服务器上恢复数据
  • BFS 解决最短路问题详解
  • 探索基因奥秘:汇智生物如何利用DNA亲和纯化测序技术革新生物医学研究?
  • 使用rust实现rtsp码流截图
  • Python
  • c语言中的杨氏矩阵的介绍以及元素查找的方法
  • Zookeeper
  • MP4 格式:前世今生与技术解析
  • Avalonia开发
  • 微信小程序如何使用自定义的字体
  • CS50
  • 【C++ 11多线程加速计算实操教程】
  • 灰度图像重心(质心)求取算法
  • Facebook公共主页bug问题解决措施清单
  • 告别户口本!今天起婚姻登记实现全国通办
  • 2025年度上海市住房城乡建设管理委工程系列中级职称评审工作启动
  • 明星站台“胖都来”背后:百元起录视频,20万可请顶流
  • 公募基金改革八大要点:建立浮动管理费收取机制、降低规模排名考核权重
  • 明天起,沪苏湖高铁、杭温高铁推出13款新型票制产品
  • 央行:增加科技创新和技术改造再贷款额度3000亿元