迭代器和生成器

一、迭代器

迭代器是一个可以记住遍历的位置的对象,迭代器从第一个元素开始访问,直到所有元素访问结束

① iter()

通过iter()得到可迭代对象(a)中的迭代器
在这里插入图片描述

② next()

通过iter()得到的迭代器(iter_a),使用next()取数据
在这里插入图片描述

③ 自定义迭代器

由于a = [1,2,33,4,5,6,77,8] 已经是个列表,列表里面本身已经存在迭代器

而自己定义的class类对象里,里面没有迭代器,因此需要__iter__ 与 __next__,当我们使用 iter()与next()时会自动调用该类的__iter__ 与 __next__

二、生成器

generator
例如受内存限制,生成1000w个list需要大量内存,如果能通过某种算法进行推算出列表的元素,当这个元素/数据需要用的时候才被生成出来,这样就可以不一次性创建大list,从而减少内存使用
即,生成器是 指记录数据生成的方法,而不是事先生成并存储完整的数据

例子:
在这里插入图片描述
list1是列表,而list2是生成器
此时 将list1改为range(100000000000000000) 后,程序会崩溃并返回137内存溢出状态码,而同样对list2操作时并不会内存溢出,且还可以对list2进行for循环打印(从而实现,当数据被需要时,才生成,以此规避内存溢出)

① 创建生成器

1、斐波那契数列

import time
class Fibonacci():
    def __init__(self):
        self.a = 1
        self.b = 1

    def __iter__(self):
        return self

    def __next__(self):
        next_num = self.a
        self.a , self.b = self.b , self.a+self.b
        return self.a

fib = Fibonacci()

for f in fib:
    print(f)
    time.sleep(2)

在这里插入图片描述

2、yield 创建

def fibonacci():
    a = 1
    b = 1
    while 1:
        next_num = a
        a , b  = b , a+b
        yield next_num

fin = fibonacci()
print(fin)
print(type(fin))

在这里插入图片描述
如果一个函数中有yield,此时fin = fibonacci()就变成了创建一个生成器对象,正常调next()即可生成数据
在这里插入图片描述

② 使用send()

在这里插入图片描述
可以通过send传入
在这里插入图片描述

相关推荐

  1. 生成器

    2024-02-07 22:50:04       14 阅读
  2. python进阶:深入理解生成器

    2024-02-07 22:50:04       36 阅读
  3. 前端:利用生成器实现分离逻辑

    2024-02-07 22:50:04       19 阅读
  4. Python学习之-生成器

    2024-02-07 22:50:04       15 阅读
  5. 生成器的区别是什么

    2024-02-07 22:50:04       5 阅读
  6. 生成器、可对象

    2024-02-07 22:50:04       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-07 22:50:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-07 22:50:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-07 22:50:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-07 22:50:04       20 阅读

热门阅读

  1. C++中的作用域

    2024-02-07 22:50:04       35 阅读
  2. c#使用Minio(3.1.13版本)

    2024-02-07 22:50:04       32 阅读
  3. C语言中的变量与函数详解

    2024-02-07 22:50:04       32 阅读
  4. Top 20 Docker 面试题(附答案)

    2024-02-07 22:50:04       31 阅读
  5. 2023-12蓝桥杯STEMA 考试 Python 中高级试卷解析

    2024-02-07 22:50:04       32 阅读
  6. leetcode69 x 的平方根

    2024-02-07 22:50:04       31 阅读
  7. SQL世界之基础命令语句

    2024-02-07 22:50:04       33 阅读
  8. 使用自定义注解处理对象状态字段

    2024-02-07 22:50:04       31 阅读
  9. Node后端基础8-登录认证1-认识Token

    2024-02-07 22:50:04       33 阅读
  10. 蓝桥杯刷题--python-3

    2024-02-07 22:50:04       35 阅读
  11. C语言中的条件编译:探索编译时的决策

    2024-02-07 22:50:04       37 阅读
  12. CGAL::2D Arrangements-5

    2024-02-07 22:50:04       29 阅读