Python基础之迭代器

这篇具有很好参考价值的文章主要介绍了Python基础之迭代器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是迭代器

迭代器即是用来迭代取值的工具,而迭代是重复反馈取值的过程,其目的通常是为了逼近所需的目标或结果,每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值,单纯的重复并不是迭代。

例如:

while True:
    msg = input("请输入内容>>>")
    print(msg)

这只是一个单纯的循环,不是迭代。

如下才是迭代:

name = ['lili','小明', '小红']
index = 0
while index < len(name):
    print(name[index])
    index += 1

输出结果:

lili
小明
小红

这个例子,不仅满足重复,而且以每次重新赋值后的index值作为下一次循环中新的索引进行取值,反复迭代,最终可以取尽列表中的值。

1.1:可迭代对象

通过索引的方式进行取值,只适用于序列类型:字符串、元组、列表。对于没有索引的字典、集合等非序列类型,进行迭代取值,就使用到了迭代器。

什么是可迭代对象呢?

内置有__iter__()方法的对象,就是一个可迭代对象,字符串、元组、列表、字典、集合、打开的文件都是一个可迭代对象。

dic = {'a':1, 'b':2}
dic.__iter__()

可以使用isinstance()方法来判断对象是不是可迭代对象。使用方法如下,返回值为bool值。

isinstance('对象名称', Iterable)

1.2:迭代器对象

内置有__iter__()和__next__()方法的对象,就是一个迭代器对象。

打开的文件本身就是一个迭代器对象,执行迭代器对象.iter()方法得到的仍然是迭代器本身,而执行迭代器.next()方法就会计算出迭代器中的下一个值。

迭代器是Python提供的一种统一的、不依赖于索引的迭代取值方式,只要存在多个“值”,无论序列类型还是非序列类型都可以按照迭代器的方式取值。

dic = {'a':1, 'b':2}      # 可迭代对象dic
s = iter(dic)             # 本质就是在调用dic.__iter__(),返回dic的迭代器对象s
print(next(s))       # 输出:a
print(next(s))       # 输出:b
print(next(s))       # 抛出StopIteration的异常,代表无值可取,迭代结束

迭代器对象不一定是可迭代对象,但可迭代对象一定是迭代器对象

二、for循环原理

例如一个遍历字符串取值的过程:

for el in "abc":
    print(el)
# a
# b
# c

for循坏在执行的时候,首先会在“abc”字符串对象上调用iter()方法,返回一个定义了__next__()方法的迭代器对象,然后再调用该迭代器对象的next()方法将取到的值赋给el,next()方法会逐一访问“abc”中的元素,当元素用尽的时候,next()方法会引发一个StopIteration异常来通知for循环,捕捉到异常后,终止循坏。

itor = iter("abc")   # 调用iter()方法,生成迭代器对象
print(itor)        # <str_iterator object at 0x100a6fcd0>
print(dir(itor))   # dir()可以显示传入对象的所有属性和方法,有__iter__和__next__
print(next(itor))  # 用python内置的next()函数来调用迭代器内部的__next__()方法

三、迭代器的优缺点

3.1:优点

1、为序列和非序列类型提供了一种统一的迭代取值方式。

2、惰性计算:迭代器对象表示的是一个数据流,可以只在需要时才去调用next来计算出一个值,就迭代器本身来说,同一时刻在内存中只有一个值,因而可以存放无限大的数据流,而对于其他容器类型,如列表,需要把所有的元素都存放于内存中,受内存大小的限制,可以存放的值的个数是有限的。

3.2:缺点

1、除非取尽,否则无法获取迭代器的长度

2、只能取下一个值,不能回到开始,更像是‘一次性的’,迭代器产生后的唯一目标就是重复执行next方法直到值取尽,否则就会停留在某个位置,等待下一次调用next;若是要再次迭代同个对象,你只能重新调用iter方法去创建一个新的迭代器对象,如果有两个或者多个循环使用同一个迭代器,必然只会有一个循环能取到值。文章来源地址https://www.toymoban.com/news/detail-422048.html

到了这里,关于Python基础之迭代器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • chatgpt赋能python:Python迭代循环详解:从基础到高级

    在Python中,迭代循环是一种非常重要的编程概念。它能够让我们在程序运行过程中多次访问一个数据集或序列,并且以各种方式对其进行操作。在本文中,我们将深入探讨Python中的迭代循环,并介绍从基础到高级的所有知识点。 在编程中,迭代循环是一种指令序列,可以重复

    2024年02月09日
    浏览(47)
  • Python基础篇(十):迭代器与生成器

    迭代器和生成器是Python中用于 处理可迭代对象 的重要概念。它们提供了一种有效的方式来 遍历和访问 集合中的元素,同时具有 节省内存和惰性计算 的特点。下面是关于迭代器和生成器的详细介绍和示例: 迭代器是一种实现了迭代协议的对象,它可以用于遍历集合中的元素

    2024年02月10日
    浏览(45)
  • C#是什么?可以用来做什么?

            C#(读作“C Sharp”)是一种容易使用不复杂新型的编程语言,不仅是面向对象,它的类型还安全。C# 源于 C 语言系列,C、C++、Java 和 JavaScript 程序员很快就可以上手使用。C# 是一个现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的,由 Ecma 和

    2024年02月21日
    浏览(39)
  • 什么是 Docker?它能用来做什么?

    云计算是一种资源的服务模式,该模式可以实现随时随地、便捷按需地从可配置计算资源共享池中获取所需的资源(如网络、服务器、存储、应用及服务),资源能够快速供应并释放,大大减少了资源管理工作开销,用户甚至可以再也不用理会那些令人头痛的传统服务供应商

    2024年02月02日
    浏览(36)
  • 【python基础语法六】迭代器,生成器,推导式和高阶函数

    内置函数: dir 获取当前对象的内置成员 高阶函数 : 能够把函数当成参数传递的就是高阶函数 (map ,filter ,reduce , sorted) 案例: 1. enumerate 2. zip 元组推导式是生成器( generator ) (1) 基本语法 (2) 优化生成器代码 (3) send 的使用方式 (给上一个 yield 发送数据) (4) yield from 的使用 (5) 案例

    2024年02月02日
    浏览(48)
  • 【Docker】什么是Docker,它用来干什么

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到

    2024年02月07日
    浏览(51)
  • 数字藏品可以用来干什么?

    一、作为数字收藏艺术品,满足收藏者的爱好。绘画、文物等艺术品是数字收藏品是最基础的应用,也是目前最受欢迎的种类,它与现实生活中的其他艺术品具有相似性,一样通过网上购买的方式获得。 数字藏品,虽然“摸不着”,但与传统艺术品相比较,又具有一定优势,

    2024年02月09日
    浏览(46)
  • Jmeter是用来做什么的?

    JMeter是一个开源的Java应用,主要用于性能测试和功能测试。它最初由Apache软件基金会设计用于测试Web应用程序,但现在已经扩展到其他测试功能。JMeter的主要功能如下: 性能测试 :性能测试是JMeter的核心功能,主要分为两大部分:负载测试和压力测试。负载测试是模拟大量

    2024年02月09日
    浏览(39)
  • 【大数据】什么是Flink?Flink能用来做什么?

    Apache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。 Apache Flink 功能强大,支持开发和运行多种不同种类的应用程序。它的主要特性包括:批流一体化、精密的

    2024年02月04日
    浏览(47)
  • 服务器是什么?它是用来干什么的?

    作者: Insist-- 个人主页: insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注   目录 一、服务器是什么? 二、服务器的作用 1、提高访问速度 2、提高安全性 三、云服务器与物理服务器 1、云服务器 云服务器的优点: 2、物理服务器 物理服务器的优点:

    2024年02月08日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包