不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • Python

    • 01.进程
    • 02.线程
    • 03.协程
    • 04.select、poll、epoll
    • 05.装饰器
    • 06.生成器和迭代器
      • 01.生成器
        • 1.1 什么是生成器?(What)
        • 1.2 生成器哪些场景应用?(Where)
        • 1.3 为什么使用生成器
      • 02.迭代器
        • 2.1 什么是迭代器(W)
    • 07.面向对象
    • 08.深浅拷贝
    • 09.垃圾回收
    • 10.上下文管理
    • 11.高阶函数
    • 12.次重点
  • GO

  • Java

  • 业务问题

  • 关键技术

  • 项目常识

  • 计算机基础

  • 常识
  • Python
xiaonaiqiang
2021-02-11
目录

06.生成器和迭代器

# 01.生成器

# 1.1 什么是生成器?(What)

  • 生成器就是一个特殊的迭代器
  • 一个有yield关键字的函数就是一个生成器
    • 生成器是这样一个函数,它记住上一次返回时在函数体中的位置。
    • 对生成器函数的第二次(或第 n 次)调用跳转至该函数中间,而上次调用的所有局部变量都保持不变。
def test():
    yield 1
    print('aaaa')
    yield 2
    print('bbb')

r1 = test()

r1.__next__()
r1.__next__()
1
2
3
4
5
6
7
8
9
10

# 1.2 生成器哪些场景应用?(Where)

  • 生成器是一个概念,我们平常写代码可能用的并不多,但是python源码大量使用

  • 比如我们tornado框架就是基于 生成器+协程

  • 在我们代码中使用举例

  • 比如我们要生成一百万个数据,如果用生成器非常节省空间,用列表浪费大量空间

import time
t1 = time.time()
g = (i for i in range(100000000))
t2 = time.time()
lst = [i for i in range(100000000)]
t3 = time.time()
print('生成器时间:',t2 - t1)  # 生成器时间: 0.0
print('列表时间:',t3 - t2)    # 列表时间: 5.821957349777222
1
2
3
4
5
6
7
8

# 1.3 为什么使用生成器

  • 节省空间
  • 高效

# 02.迭代器

# 2.1 什么是迭代器(W)

  • 迭代器是访问集合内元素的一种方法
    • 总是从集合内第一个元素访问,直到所有元素都被访问过结束,当调用 __next__而元素返回会引发一个,StopIteration异常
  • 有两个方法:_iter_ _next_
    • _iter_ : 返回迭代器自身
    • _next_: 返回下一个元素
上次更新: 2025/2/25 11:09:45
05.装饰器
07.面向对象

← 05.装饰器 07.面向对象→

最近更新
01
04.数组双指针排序_子数组
03-25
02
08.动态规划
03-25
03
06.回溯算法
03-25
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式