脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - Python 迭代器Iterator详情

Python 迭代器Iterator详情

2023-02-22 11:39盆友圈的小可爱 Python

这篇文章主要介绍了Python 迭代器Iterator详情,迭代器可以帮助我们解决面对复杂的数据场景时,快速简便的获取数据,下文关于其详细介绍,需要的小伙伴可以参考一下

前言

当我们需要对列表(list)、元组(tuple)、字典(dictionary)和集合(set)的元素进行遍历时,其实Python内部都是启动迭代器来完成操作的。

迭代器(Iterator)并非Python独有的,在C++和Java中也出现了此概念。迭代器可以帮助我们解决面对复杂的数据场景时,快速简便的获取数据

1. 什么是迭代器?

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

2. 迭代器类型

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

3. 迭代器分类

容器迭代器

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

遍历迭代器

?
1
2
for i in it:
    print(i)

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

自定义迭代器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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 Iterator内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/7102018713028657160

延伸 · 阅读

精彩推荐
  • PythonPython编程super应用场景及示例解析

    Python编程super应用场景及示例解析

    最近有粉丝向我咨询super相关的问题,说网上搜索到的教程不够通俗易懂,看了之后还是不太理解。所以在这里基于我自己的理解来讲解一下super...

    曲鸟10702022-01-18
  • Pythonpython单元测试之pytest的使用

    python单元测试之pytest的使用

    Pytest是Python的一种单元测试框架,与 Python 自带的 Unittest 测试框架类似,但是比 Unittest 框架使用起来更简洁,效率更高,今天给大家详细介绍一下pytest的使用,需...

    yun6787432021-11-24
  • Pythonpycharm软件实现设置自动保存操作

    pycharm软件实现设置自动保存操作

    这篇文章主要介绍了pycharm软件实现设置自动保存操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    xiaofei_sun8532020-06-09
  • Pythonpython编程的核心知识点总结

    python编程的核心知识点总结

    在本篇文章里小编给大家整理的是一篇关于python编程的核心知识点总结内容,对此有兴趣的朋友们可以学习参考下。...

    PY网11902021-09-04
  • Python详解python分布式进程

    详解python分布式进程

    在本专题里,小编给大家讲述了关于python分布式进程的相关知识点内容,需要的朋友们参考下。...

    脚本之家3772021-04-06
  • Python解决PyQt5 无边框后窗口的移动问题

    解决PyQt5 无边框后窗口的移动问题

    这篇文章主要介绍了解决PyQt5 无边框后窗口的移动问题,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧...

    FanMLei6902021-09-17
  • Pythonpython使用matplotlib显示图像失真的解决方案

    python使用matplotlib显示图像失真的解决方案

    这篇文章主要介绍了python使用matplotlib显示图像失真的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    文质彬彬online11632021-10-19
  • PythonPython正则表达式匹配HTML页面编码

    Python正则表达式匹配HTML页面编码

    这篇文章主要介绍了Python正则表达式匹配HTML页面编码,本文直接给出代码和匹配实例,需要的朋友可以参考下 ...

    脚本之家8692020-06-01