广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python学习之迭代器详解
  • 518
分享到

Python学习之迭代器详解

2024-04-02 19:04:59 518人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录什么是迭代器如何生成迭代器迭代器函数 - iter() 函数 与 next() 函数可迭代的对象生成迭代器迭代器的用法 - 演示案例什么是迭代器 迭代是 python 中访问集合

什么是迭代器

迭代是 python 中访问集合元素的一种非常强大的一种方式。迭代器是一个可以记住遍历位置的对象,因此不会像列表那样一次性全部生成,而是可以等到用的时候才生成,因此节省了大量的内存资源。迭代器对象从集合中的第一个元素开始访问,直到所有的元素被访问完。迭代器有两个方法:iter()和 next()方法。

这么解释可能不太直观,我们以生活的一个小栗子来解释一下,方便大家能够更深刻的理解。比如说我们去超市买水果,而正巧超市的服务人员正在摆放苹果。服务人员告诉我们需要等苹果都摆放完毕我们才可以拿苹果,这样就很耽误我们的时间。(这个场景中,柜台上其实已经有苹果了,只不过销售不让拿罢了。)

然后我们再去卖橘子的柜台,服务人员也在摆放橘子。但是服务人员告诉我们可以不用等他摆放完毕,我们可以直接拿橘子,这样就会很好的节省我们的时间。如果我们拿橘子的速度超过了服务人员摆放的速度 ,我们只需要等待服务人员摆放之后就可以直接拿橘子,大大的提升了我们买橘子的效率。

而迭代器就类似于我们买橘子的场景,我们平时的程序都是一次性写入到内存中。比如我们的列表中存在成百上千的数据,都是一次性写入到内存里的,通过这样让我们来使用。但是迭代器却是按需加载,有一点内容就会放在内容里面,我们就可以立刻使用内存中的数据进行我们的逻辑处理。这样就不要所有的数据都写入到内存中就可以使用,大大的提升了使用效率。

如何生成迭代器

迭代器函数 - iter() 函数 与 next() 函数

iter(iterable)从可迭代对象中返回一个迭代器,iterable必须是能提供一个迭代器的对象

next(iterator) 从迭代器iterator中获取下一了记录,如果无法获取下一条记录,则触发stoptrerator异常
说明:

1.迭代器只能往前取值,不会后退

2.用iter函数可以返回一个可迭代对象的迭代器

示例:

iter()函数介绍:生成一个迭代器对象

iter()函数用法:iter(iterable)

参数介绍:iterable —> 可迭代的数据类型(比如列表、字典、元组以及集合类型等)

示例:

iter([1, 2, 3])

返回值:

<list_iterator at 0x4f3bff0>

next()函数介绍:返回迭代器中的数据

next()函数用法:next(iterable)

参数介绍:iterable —> 迭代器对象

示例:

iter_obj = iter([1,2,3])
next(iter_obj)

返回值:

# >>> 1,2,3
# >>> StopIteration

综上,我们得出结论:

iter(iterable)从可迭代对象中返回一个迭代器,iterable必须是能提供一个迭代器的对象

next(iterable) 从迭代器iterator中获取下一了记录,如果无法获取下一条记录,则触发stoptrerator异常

演示案例如下:

# coding:utf-8


test_list = [1, 3, 5, 7]
test_iter = iter(test_list)     # 让test_list提供一个能访问自己的迭代器
print(next(test_iter))     # 1  从迭代器中取值,让迭代器去获取l中的一个元素
print(next(test_iter))     # 3
print(next(test_iter))     # 5
print(next(test_iter))     # 7
print(next(test_iter))     # StopIterable 异常

test_list 实际上是一个列表,但是被迭代器迭代之后。并不是一次性将列表放入内存中,而是每次放一个元素进入内存,然后被读取。(这就是我们说的按需加载)

可迭代的对象

类似于list、tuple、str 等类型的数据可以使用for… in… 的循环遍历语法可以从其中依次拿到数据并进行使用,我们把这个过程称为遍历,也称迭代。Python中可迭代的对象有list(列表)、tuple(元组)、dirt(字典)、str(字符串)set(集合)等。

示例如下:

test_list = [1,2,3,4,5]
test_dirt = {
    "name":"张三",
    "sex":"男",
    "age":33
    }
    
test_tuple = (1,2,3,4,5)
test_set = {1,2,3,3,4}
 
    
for i in test_list:
    print(i)
 
for i in test_dirt:
    print(i)
 
for i in test_tuple:
    print(i)
 
for i,j in test_set.items():
    print("%s:%s" % (i,j))
    
# >>> 执行结果如下:
# >>> test_list的元素为: 1
# >>> test_list的元素为: 2
# >>> test_list的元素为: 3
# >>> test_list的元素为: 4
# >>> test_list的元素为: 5
# >>> test_dirt的元素为: name
# >>> test_dirt的元素为: sex
# >>> test_dirt的元素为: age
# >>> test_tuple的元素为: 1
# >>> test_tuple的元素为: 2
# >>> test_tuple的元素为: 3
# >>> test_tuple的元素为: 4
# >>> test_tuple的元素为: 5
# >>> test_set的元素为:1
# >>> test_set的元素为:2
# >>> test_set的元素为:3
# >>> test_set的元素为:4

生成迭代器

除了刚刚我们使用的 iter() 函数之外 ,我们还有其他方法生成迭代器:

第一种:for循环生成方法 —> 我们可以在函数中使用 for 循环, 并对每一个 for 循环的成员使用 yield() 函数 [它的意思就是将每一个 for 循环成员放到一个迭代器对象中,不过只有被调用才会被放入。]

示例如下:

def test():
    for i in range(10):
        yield i


result = test()

print('for 循环,第一次 \'i\'的值为:', next(result))
print('for 循环,第二次 \'i\'的值为:', next(result))
print('for 循环,第三次 \'i\'的值为:', next(result))
print('for 循环,第四次 \'i\'的值为:', next(result))

# >>> 执行结果如下:
# >>> for 循环,第一次 'i'的值为: 0
# >>> for 循环,第二次 'i'的值为: 1
# >>> for 循环,第三次 'i'的值为: 2
# >>> for 循环,第四次 'i'的值为: 3

注意:超过10次异常会抛 StopIteration 的异常。

第二种:for 循环一行生成迭代器对象。

示例如下:

result = (i for i in [1, 2, 3])        # 将 for 循环在非函数中 赋值 给一个变量, 这也是生成一个迭代器变量的方法  

print('for 循环,第一次 \'i\'的值为:', next(result))        # 使用 next 调用迭代器
print('for 循环,第二次 \'i\'的值为:', next(result))
print('for 循环,第三次 \'i\'的值为:', next(result))

# >>> for 循环,第一次 'i'的值为: 1
# >>> for 循环,第二次 'i'的值为: 2
# >>> for 循环,第三次 'i'的值为: 3

注意: next(result) 超过4次会抛 StopIteration 的异常。

划重点:

使用 for 循环生成的迭代器,可以不使用 next() 函数 也可以执行,(依然可以通过 for 循环 获取迭代器的数据)不仅如此,当我们调取完迭代器中的数据之后,程序不会抛出异常,相比较与 next() 函数要友好的多。

示例如下:

result = (i for i in [1, 2, 3])

for item in result:
    print(item)
    
# >>> 执行结果如下:
# >>> 1
# >>> 2
# >>> 3

# 循环结束,程序正常退出,不会抛出 StopIteration 的异常

迭代器的用法 - 演示案例

案例一:

def make_iter():
    for i in range(5):
        yield i

iter_obj = make_iter()

for i in iter_obj:
    print(i)
print('----')
for i in iter_obj:
    print(i)
    
# >>> 执行结果如下:
# >>> 0
# >>> 1
# >>> 2
# >>> 3
# >>> 4
# >>> ----

# >>> 从运行结果得出结论,当我们从内存中读取完迭代器所有的值后,内存就会被释放,不再循环输出。

案例二:

iter_obj = (i for i in range(4))

for i in iter_obj:
    print(i)
print('=====')
for i in iter_obj:
    print(i)

# >>> 执行结果如下:
# >>> 0
# >>> 1
# >>> 2
# >>> 3
# >>> =====
# >>> 从运行结果得出结论,当我们从内存中读取完迭代器所有的值后,内存就会被释放,不再循环输出。

迭代器 除了前文我们提到的 按需加载 ,可以提升我们的执行速度以外。

还有另外一个原因,试想一下:如果我们的列表只有10个数据,那么读取的速度会很快。可能对资源(也就是我们的内存)占用的消耗不是很大;如果我们有一个成千上万甚至十万数据的列表,那么这些数据都要一次性的写入内存里,这么多的数据所消耗占用的资源必然会很大,甚至会撑爆我们的内存造成内存溢出,程序就会报错了。

所以如果通过迭代器的方式,我们只需要用到一个数据就将一个数据扔到内存里并且被使用。这样既可以提高我们内存使用的效率,又可以减少我们内存的消耗。这也是我们平时使用迭代器的目的。

到此这篇关于Python学习之迭代器详解的文章就介绍到这了,更多相关Python迭代器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python学习之迭代器详解

本文链接: https://www.lsjlt.com/news/144717.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python学习之迭代器详解
    目录什么是迭代器如何生成迭代器迭代器函数 - iter() 函数 与 next() 函数可迭代的对象生成迭代器迭代器的用法 - 演示案例什么是迭代器 迭代是 python 中访问集合...
    99+
    2022-11-13
  • Python学习之迭代器的使用教程详解
    目录Python 迭代器迭代器 VS 可迭代对象(Iterable)遍历迭代器创建迭代器StopIterationPython 迭代器 迭代器是一种对象,该对象包含值的可计数数字。 ...
    99+
    2023-03-06
    Python迭代器使用 Python迭代器
  • python学习之可迭代对象、迭代器、生成器
    Iterable – 可迭代对象 能够逐一返回其成员项的对象。 可迭代对象的例子包括所有序列类型 (例如 list, str 和 tuple) 以及某些非序列类型例如 dict, 文...
    99+
    2022-11-12
  • Python学习之迭代器和生成器
    迭代器 在Python如果一个对象可被循环(遍历)该对象中每一个元素的过程叫做迭代。例如 ,字典、字符串、列表、元祖、集合等。他们可被迭代的原因是,都有一个共同的内置函数__iter__。通过执行内置对象的__next__函数,可以依次打...
    99+
    2023-01-30
    生成器 迭代 Python
  • Python学习 :迭代器&生成器
    列表生成式 列表生成式的操作顺序: 1、先依次来读取元素 for x 2、对元素进行操作 x*x 3、赋予变量 Eg.列表生成式方式一 a = [x*x for x in range(10)] print(a) >>&g...
    99+
    2023-01-30
    生成器 迭代 Python
  • 详解Python之可迭代对象,迭代器和生成器
    目录一、概念描述二、序列的可迭代性三、经典的迭代器模式四、生成器也是迭代器五、实现惰性迭代器六、使用生成器表达式简化惰性迭代器总结 一、概念描述 可迭代对象就是可以迭代的对象,我们可...
    99+
    2022-11-12
  • 详解Python迭代和迭代器
    我们将要来学习python的重要概念迭代和迭代器,通过简单实用的例子如列表迭代器和xrange。 可迭代 一个对象,物理或者虚拟存储的序列。list,tuple,strins,dicttionary,set...
    99+
    2022-06-04
    迭代 详解 Python
  • Python迭代和迭代器详解
    迭代器 迭代器(iterator)有时又称游标(cursor)是程式设计的软件设计模式,可在容器物件(container,例如链表或阵列)上遍访的界面,设计人员无需关心容器物件的内存分配的实现细节。 摘自维...
    99+
    2022-06-04
    迭代 详解 Python
  • python学习笔记-迭代
    python中我们可以对list、tuple、dict或者其他可迭代的对象进行迭代从而遍历取出各个元素。 如何判断一个对象是不是一个可迭代对象 判断一个对象是不是可迭代对象可以使用isinstance判断是否是collections模块的...
    99+
    2023-01-31
    学习笔记 迭代 python
  • Python学习之三大名器-装饰器、迭代器、生成器
    一、装饰器装饰,顾名思义就是在原来的基础上进行美化及完善,器这里指函数,所以说装饰器就是装饰函数,也就是在不改变原来函数的代码及调用方式的前提下对原函数进行功能上的完善。其核心原理其实是利用闭包。格式 @关键字+装饰函数被装饰函数()注意:...
    99+
    2023-06-02
  • 详解python学习笔记之解释器
    目录1、python教程1.1 概述1.2 python标准库1.3 python语言参考手册1.4 python包索引1.5 术语对照表2、课前甜点3、python解析器3.1 传...
    99+
    2022-11-13
  • PYTHON学习0039:函数---迭代
    迭代就类似循环。数字不是可迭代类型。Iterable表示是否是可迭代对象,Iterator表示是否是迭代器。数据流是一个有序的数据排列集合,表示没有截止的,就像水流和时间一样,无穷无尽的。而列表,字典等有起点和终点的。...
    99+
    2023-01-31
    函数 迭代 PYTHON
  • python yield迭代器详解
    目录一、yield迭代器二、使用步骤1.引入库2.读入数据总结一、yield迭代器 在python深度学习模型读取数据时,经常遇到yield,互联网搜索后,将比较容易理解的说明记录一...
    99+
    2022-11-13
    python yield python yield迭代器
  • python学习之Python count()函数详解
    大家好,依旧是你们的萧萧啊。 Python中的count()函数是一种非常常用的方法,用于统计某个元素在列表、元组或字符串中出现的次数。它的使用非常简单,只需要传入要统计的元素作为参数即可。在本篇博客中,我将详细介绍count()函数的用法...
    99+
    2023-09-29
    学习 python
  • 学会javascript之迭代器
    目录简介 js 中的迭代器是什么样子的 迭代协议 可迭代协议 迭代器协议 迭代过程 迭代总结 自定义迭代 传统写法 生成器函数写法 简介   迭代器是一种设计模式,可在容器对象 如...
    99+
    2022-11-12
  • Python异步之迭代器如何使用详解
    目录正文1. 什么是异步迭代器1.1. Iterators1.2. Asynchronous Iterators2. 什么是“async for”循环?3. ...
    99+
    2023-03-22
    Python异步迭代器 Python异步
  • Python之迭代器
    ''' 查看可对某个变量或数据类型执行的操作 : dir(var) 迭代器 : 在同一个代码块中,依次取出可迭代对象中的每一个元素     特点 : 完全忽视可迭代对象的索引以及长度,只关注下一块内存是否有值;     实现原理(猜测) :...
    99+
    2023-01-31
    迭代 Python
  • python机器学习之线性回归详解
    目录一、python机器学习–线性回归二、OLS线性回归2.1 Ordinary Least Squares 最小二乘法2.2 OLS线性回归的代码实现三、梯度下降算法3.1 GDL...
    99+
    2022-11-12
  • 深度学习详解之初试机器学习
    机器学习可应用在各个方面,本篇将在系统性进入机器学习方向前,初步认识机器学习,利用线性回归预测波士顿房价; 原理简介 利用线性回归最简单的形式预测房价,只需要把它当做是一次线性函数y...
    99+
    2022-11-12
  • python迭代器,生成器详解
    目录迭代器 生成器 总结迭代器 聊迭代器前我们要先清楚迭代的概念:通常来讲从一个对象中依次取出数据,这个过程叫做遍历,这个手段称为迭代(重复执行某一段代码块,并将每一次迭代得到的结...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作