首页 > 编程语言 >day18:python 迭代器

day18:python 迭代器

时间:2024-08-23 13:51:37浏览次数:10  
标签:__ .__ 迭代 python iter 对象 print day18

目录

一、迭代器

1. 什么是迭代器

迭代器指的是迭代取值的工具,迭代是一个重复的过程,每次重复都是基于上一次的结果而继续的,单纯的重复并不是迭代

2. 为何要有迭代器

迭代器是用来迭代取值的工具,而涉及到把多个值循环取出来的类型有:列表、字符串、元组、字典、集合、打开文件

l=['egon','liu','alex']
i=0
while i < len(l):
    print(l[i])
    i+=1      

上述迭代取值的方式只适用于有索引的数据类型:列表、字符串、元组为了解决基于索引迭代器取值的局限性python必须提供一种能够不依赖于索引的取值方式,这就是迭代器。

3. 如何用迭代器

3.1 可迭代的对象:但凡内置有__iter__方法的都称之为可迭代的对象

可迭代对象有:字符串、列表、元组、字典、集合、文件

s1=''
s1.__iter__()
print(f'【字符串】迭代器对象s1.__iter__()的值为:{s1.__iter__()}')

l=[]
l.__iter__()
print(f'【列表】  迭代器对象l.__iter__()的值为:{l.__iter__()}')

t=(1,)
t.__iter__()
print(f'【元组】  迭代器对象t.__iter__()的值为:{t.__iter__()}')

d={'a':1}
d.__iter__()
print(f'【字典】  迭代器对象d.__iter__()的值为:{d.__iter__()}')

set1={1,2,3}
set1.__iter__()
print(f'【集合】  迭代器对象set1.__iter__()的值为:{set1.__iter__()}')

with open('a.txt',mode='w') as f:
    print(f'=============文件本身=============》:{f}')
    f.__iter__()
    print(f'【文件】  迭代器对象l.__iter__()的值为:{f.__iter__()}')
    pass

在这里插入图片描述

3.2 调用可迭代对象下的__iter__方法会将其转换成迭代器对象

'''举例1:以字典进行说明'''

d={'a':1,'b':2,'c':3}
d_iterator=d.__iter__()
print(d)
print(d_iterator) # <dict_keyiterator object at 0x7f09e7f63318>

print(d_iterator.__next__())  # d_iterator.__next__()一个一个取值,每次只能取一个
print(d_iterator.__next__())
print(d_iterator.__next__())

print(d_iterator.__next__()) # d_iterator.__next__()值取空了,继续取导致取不到值,返回错误 StopIteration
'''举例2:以字典进行说明,在案例1基础上优化代码'''

d={'a':1,'b':2,'c':3}
d_iterator=d.__iter__()

while True:
    try:
        print(d_iterator.__next__())
    except StopIteration:
        break

4. 可迭代对象与迭代器对象详解

【可迭代对象】:
① 可以转换成迭代器的对象
② 内置有__iter__方法对象,可迭代对象__iter__得到迭代器对象

【迭代器对象】:
① 内置有__next__方法并且内置有__iter__方法的对象
② 迭代器对象.next():得到迭代器的下一个值
③ 迭代器对象.iter():得到迭代器的本身,说白了调了跟没调一个样子

案例:dic_iterator 迭代器对象再次调用.iter()依然为迭代器对象

dic={'a':1,'b':2,'c':3}

dic_iterator=dic.__iter__()
print(dic_iterator is dic_iterator.__iter__().__iter__().__iter__())

True

5. 可迭代对象和迭代器对象有哪些?

【可迭代对象】:字符串、列表、元组、字典、集合、文件对象
【迭代器对象】:文件对象

注意到:文件即是可迭代对象,也是迭代器对象,根据下面的文件

6. for循环的工作原理:for循环可以称之为叫迭代器循环

1、 下面__iter__得到一个迭代器对象
2、迭代器对象__next__()拿到一个返回值,然后将该返回值赋值给k
3、循环往复步骤2,直到抛出StopIteration异常for循环会捕捉异常然后结束循环

d={'a':1,'b':2,'c':3}
for k in d:
    print(k)

with open('a.txt',mode='rt',encoding='utf-8') as f:
    for line in f: # f.__iter__()
        print(line)
        
# list('hello') #原理同for循环

7. 迭代器优缺点总结

7.1 优点:
①为序列和非序列类型提供了一种统一的迭代取值方式。
②惰性计算:迭代器对象表示的是一个数据流,可以只在需要时才去调用next来计算出一个值,就迭代器本身来说,同一时刻在内存中只有一个值,因而可以存放无限大的数据流,而对于其他容器类型,如列表,需要把所有的元素都存放于内存中,受内存大小的限制,可以存放的值的个数是有限的。

7.2 缺点:
①除非取尽,否则无法获取迭代器的长度
②只能取下一个值,不能回到开始,更像是‘一次性的’,迭代器产生后的唯一目标就是重复执行next方法直到值取尽,否则就会停留在某个位置,等待下一次调用next;若是要再次迭代同个对象,你只能重新调用iter方法去创建一个新的迭代器对象,如果有两个或者多个循环使用同一个迭代器,必然只会有一个循环能取到值。

标签:__,.__,迭代,python,iter,对象,print,day18
From: https://blog.csdn.net/weixin_46375313/article/details/141310899

相关文章

  • Python中共享内存对进程池的影响
    在Coding过程中,发现了共享内存会对进程池产生影响。原始程序设计的思路是,在类中使用进程池创建不同的进程,这些进程间通过共享内存的方式控制一些变量。代码如下importctypesfrommultiprocessingimportPool,ValueclassEx:def__init__(self,value):self......
  • 【Python】函数的定义和调用、形参和实参、函数的返回值、多元赋值、全局和局部变量
    文章目录函数的定义函数的调用形参和实参函数的返回值一个return多个return多元赋值变量作用域函数内的变量全局变量和局部变量修改全局变量函数的定义函数的定义:分配任务def函数名(形参列表): 函数体 return返回值def:define,定义形参列表中,可以有多个形......
  • python 06-标准库:random、string、webbrowser、email模块
    random、string模块importrandomimportstringprint(random.random())#任意-个float数字print(random.randint(1,10))#1-10之间包括1和18中任意一个整数print(random.choice([1,2,3]))#1,2,3这几个数字里面任意一个print(random.choices([1,2,3],k=2))......
  • Python个人收入影响因素模型构建:回归、决策树、梯度提升、岭回归
    全文链接:https://tecdat.cn/?p=37423原文出处:拓端数据部落公众号“你的命运早在出生那一刻起便被决定了。”这样无力的话语,无数次在年轻人的脑海中回响,尤其是在那些因地域差异而面临教育资源匮乏的年轻人中更为普遍。在中国,这种现象尤为明显:没有生在大城市的他们,从小便需面对......
  • python安装paramiko报错
    腾讯云上python3.6,使用pip3.6install paramiko报错[root@VM-0-14-centostest]#pip3.6installparamikoWARNING:Runningpipinstallwithrootprivilegesisgenerallynotagoodidea.Try`pip3.6install--user`instead.CollectingparamikoDownloadinghttp://......
  • python实现token签名认证
    当你注册了一个网站,通常,网站会向你的邮箱里发一封激活邮件,邮件里会有一个url,只有当你点击这个url,才能激活你的用户身份。如何完成身份确认呢?通常,邮箱里的那个url里会有一个token,这个token是所有问题的关键,当你点击url,网站后台会受到这个请求,得到这个token,网站必须通过这个token找......
  • Python解析DB URI
    数据库配置信息一般包含数据库类型、数据库服务器地址、端口号、用户名、密码、要链接的数据库,以及一些选项等,例如通常我们需要配置多个变量来完成整个配置,如db_type='mysql'host='localhost'port=3306user='root'password='passw0rd'db='testdb'charset='u......
  • 用Python实现9大回归算法详解——09. 决策树回归算法
    1.决策树回归的基本概念决策树回归(DecisionTreeRegression)是一种树状结构的回归模型,通过对数据集进行递归分割,将数据分成更小的子集,并在每个子集上进行简单的线性回归。决策树的核心思想是通过选择特征及其阈值来最大化每次分裂后的目标函数增益,从而找到使误差最小化的模型......
  • Python下载安装全流程(Python 最新版本),新手小白必看!
    第一次接触Python,可能是爬虫或者是信息AI开发的小朋友,都说Python语言简单,那么多学一些总是有好处的,下面从一个完全不懂的Python的小白来安装Python等一系列工作的记录,并且遇到的问题也会写出,让完全不懂的小白也可上手安装,并且完成第一个Helloworld代码。需要安装包......
  • python socket编辑示例 UDP
    服务端:fromsocketimportsocket,AF_INET,SOCK_DGRAMrecv_socket=socket(AF_INET,SOCK_DGRAM)recv_socket.bind(('127.0.0.1',8888))whileTrue:data,addr=recv_socket.recvfrom(1024)#接收数据print('客户说:',data.decode('......