Python 迭代器Iterator详情

1. 什么是迭代器?

  • 迭代器是一个表示数据流的对象,当我们调用next()方法时会返回容器中的下一个值
  • 迭代器中包含__iter____next__()方法。通过__iter__方法可以返回迭代器对象本身的方法。__next__()方法会使cur指针始终指向当前位置,即返回容器中的下一个值,如果容器中没有更多元素了,则会抛出StopIteration异常。
  • 迭代器(iterator)也是可迭代的对象(iterable)

 

2. 迭代器类型

  • Python中支持容器进行迭代,同时也提供迭代器协议支持用户自定义类进行迭代
  • 容器迭代器:container.__iter__()方法实现容器对象迭代
  • 迭代器协议:__iter__()方法和__next__()方法
  • __iter__():返回迭代器本身,容器可以与for...in结合使用
  • __next__():返回迭代器返回下一项

 

3. 迭代器分类

   容器迭代器

data = [1,2,3,4]
it = iter(data)
print(next(it))
print(next(it))
  • Python中提供的内置容器有:list、tuple、dictionary 和 set都是可迭代对象
  • 调用iter()方法获取对应的迭代对象
  • 调用next()方法获取迭代对象下一项值。每一次调用next之后,会自动往后移到到一位,获取后面一位的数据。

遍历迭代器

for i in it:
    print(i)

对于可迭代对象,我们也可以使用for...in来进行迭代

 

 自定义迭代器

 

class Myiter:
    def __init__(self,times):
        self.times = times
    def __iter__(self):
        self.n = 0
        return self
    def __next__(self):
        if self.n <= self.times:
           result = 3 ** self.n
            self.n += 1
            return result
        else:
            raise StopIteration
data = Myiter(4)
it = iter(data)
# 第1次
print(next(it))
# 第2次
print(next(it))
# 第3次
print(next(it))
# 第4次
print(next(it))
# 第5次
print(next(it))
# 第6次,超出范围触发StopIteration
print(next(it))
...
1
3
9
27
81
Traceback (most recent call last):
  File "E:\workspace\uiat\cookbooks\tester.py", line 67, in <module>
    print(next(it))
  File "E:\workspace\uiat\cookbooks\tester.py", line 51, in __next__
    raise StopIteration
StopIteration
...

 

  • 创建的对象/类需要实现 __iter__() 和 __next__()两个方法即可作为迭代器
  • 迭代器中__iter__()返回迭代器本身方法
  • 迭代器中__next__()方法允许进行其他操作,但是必须返回迭代器的下一项
  • 为了防止迭代永远进行下去,Python提供stopIterator语句,终止迭代

 

总结

 

Python Iterator迭代器由__iter__()方法和__next__()方法组成。迭代器分为Iterator和iteratable两种,因此迭代器本身也是可迭代对象的。

迭代器分为容器迭代和自定义迭代。

 

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 迭代器Iterator详情 - Python技术站

(0)
上一篇 2023年3月31日
下一篇 2023年3月31日

相关文章

  • 什么是 Python?Python 基础编程入门指南

    Python是当今最流行的编程语言之一。Python以其简单的语法和多功能性而闻名,既易于学习又可用于高级应用程序。可以使用Python的领域也非常广泛,人工智能、机器学习、Web 开发…基本上绝大多数热门的域都能看到Python的身影。   今天,我们将深入了解 Python 是什么,它经常用于什么,以及如何从今天开始学习 Python。   Python…

    2023年4月2日
    00
  • 你写过哪些实用的Python代码?

    Python这门语言很适合用来写些实用的小脚本,跑个自动化、爬虫、算法什么的,非常方便。   这也是很多人学习Python的乐趣所在,可能只需要花个礼拜入门语法,就能用第三方库去解决实际问题。我在Github上就看到过不少Python代码的项目,几十行代码就能实现一个场景功能,非常实用。   比方说仓库Python-master里的几个简单例子:   1、创…

    2023年4月2日
    00
  • Python+matplotlib实现折线图的美化

    1. 导入包 import pandas as pd import matplotlib.pyplot as plt import matplotlib.ticker as ticker import matplotlib.gridspec as gridspec 2. 获得数据 file_id = ‘1yM_F93NY4QkxjlKL3GzdcCQEnBi…

    2023年3月31日
    00
  • python自学最快多长时间学完?

    0.基本的数据类型:   Number(数字) String(字符串) List(列表) Tuple(元组) Set(集合) Dictionary(字典)   1.基本的输入输出: input #输入 print #输出 age = 10; name = “小明”; print(age,type(age)) inputage = input(“请输入你的年龄…

    Python开发 2023年4月2日
    00
  • python烟花代码

    python烟花代码   如下 # -*- coding: utf-8 -*- import math, random,time import threading import tkinter as tk import re #import uuid Fireworks=[] maxFireworks=8 height,width=600,600 class…

    2023年4月2日
    00
  • 程序员必备的6个好习惯,成为更优秀的自己

    如果你有机会跟一些技术大牛接触的话,你会发现别人不仅是技术上比一般人强很多,而且在做事方面也有许多不一样的习惯,在职场卷了这么多年依然保持的习惯,往往是值得我们借鉴和学习的。 今天给大家分享几个优秀程序员的好习惯,养成这6个习惯,你也能成为编程老司机。       第一,代码自测再交付 写完代码不要急于交付,先把代码自己测试一遍,过了自己这一关,减少别人发现…

    2023年4月2日
    00
  • Python中的列表条件求和方法

    列表条件求和方法   list_data=[ [1.0, ‘配件’, ‘522422’, ‘铝扣板用纽扣’, ‘金色’, ”, 72.0, ‘PC’, ”], [2.0, ‘配件’, ‘500031’, ‘十字槽沉头自钻自攻螺钉4.2*45’, ‘原色’, ”, 72.0, ‘PC’, ”], [1.0, ‘配件’, ‘522422’, ‘铝扣板用纽…

    Python开发 2023年4月2日
    00
  • python常见报错以及解决方案,,以下是Python常见的报错以及解决方法,快进入收藏…

    AttribteError: ‘module’ object has no attribute xxx’ 描述:模块没有相关属性。可能出现的原因:1.命名.py文件时,使用了Python保留字或者与模块名等相同。解决:修改文件名2…pyc文件中缓存了没有更新的代码。解决:删除该库的.pyc 文件   AttributeError: ‘Obj’ object …

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部