Python 迭代器Iterator详情
作者:??盆友圈的小可爱???? 发布时间:2021-10-12 07:01:42
前言
当我们需要对列表(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. 迭代器分类
容器迭代器
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语句,终止迭代
来源:https://juejin.cn/post/7102018713028657160


猜你喜欢
- 方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100 
- 如何在读取Excel文件时创建列表的下拉菜单?代码如下,用来创建工作表列表的下拉菜单: < select 
- 一、说明之前写了一篇“Python执行系统命令教程”讲了如何执行系统命令。除了执行系统命令外,我们有时还需要动态地执行一些python代码,
- 创建一个软件包(package)似乎已经足够简单了,也就是在文件目录下搜集一些模块,再加上一个__init__.py文件,对吧?我们很容易看
- __new__ 方法是什么?如果将类比喻为工厂,那么__init__()方法则是该工厂的生产工人,__init__()方法接受的初始化参 数
- 本文实例讲述了python获取当前计算机cpu数量的方法。分享给大家供大家参考。具体分析如下:这里实际上返回的是计算机的cpu核心数,比如c
- prototype 是在 IE 4 及其以后版本引入的一个针对于某一类的对象的方法,而且特殊的地方便在于:它是一个给类的对象添加方法的方法!
- 一、什么是集合二、集合的创建方式集合中的元素不能重复#地点:湖北武汉#姓名:学工科的皮皮志#开发时间:2022/2/27 19:
- 创建视图创建视图success.blade.php<!doctype html><html lang="{{ s
- 高动态范围成像一、引言如今,大多数数字图像和成像设备每通道使用 8 位整数表示灰度,因此将设备的动态范围限制在两个数量级(实际上是 256
- 关于Django生成迁移文件,我是在虚拟机上完成的1.创建虚拟环境:在终端上输入创建python3的虚拟环境mkvirtualenv -p
- 感觉这个东西很常用,很多其它js框架里有,但是太大了,用不了太多,自己写了个。需要的朋友可以参考下。下面是html测试代码:<!DOC
- 前言当我们需要对列表(list)、元组(tuple)、字典(dictionary)和集合(set)的元素进行遍历时,其实Python内部都是
- 本文实例讲述了JS仿Windows开机启动Loading进度条的方法。分享给大家供大家参考。具体实现方法如下:<html><
- 一、准备工作:安装pywin32,后面开发需要pywin32的支持,否则无法完成与windows层面相关的操作。pywin32的具体安装及注
- I. 前言在上一篇文章深入理解PyTorch中LSTM的输入和输出(从input输入到Linear输出)中,我详细地解释了如何利用PyTor
- 在你的程序初始化时使用如下代码: <?php $Php2Html_FileUrl = $_SERVER["REQU
- 1、首先看SSM(Spring+SpringBoot+Mybatis)的依赖<project xmlns="http://m
- 1创建窗口1 turtle.setup(width,height,startx,starty)设置主窗口的大小和位置,width如果是整数,
- # -*- coding: utf-8 -*-import Image,ImageDraw,ImageFontimport randomim