迭代器
一 迭代器
迭代器是Python最强大的功能之一,是访问集合元素的一种方式
迭代器是一种可以记住遍历的位置的对象。
1迭代器的特点:
(1)节省内存
比如展现一个上亿元素的列表并计算,sum([i*i for i in range(1000000000)])
内存小的机器肯定要宕机
(2)惰性机制
调用一次__next__方法,执行一次
(3)单向执行,不可逆
既就是迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完后结束。只能往前不能后退
2 判断对象是不是可迭代对象
(1)常见的课迭代对象
包含字符串str、列表list、元组tuple、字典dict、集合set、range以及文件句柄
(2)第一种判断方法__iter__
str1="abcdegggg" list1=[1,3,4,5] print('__iter__' in dir(str1)) print('__iter__' in dir(list1)) 结果为: True True
(2)第二种判断方法 isinstance('abc',Iterable)
str1="abcdegggg" list1=[1,3,4,5] from collections import Iterable print(isinstance(str1,Iterable)) print(isinstance(list1,Iterable)) print(isinstance(123,Iterable)) 结果为: True True False
3创建迭代器的方法
将可迭代对象转化为迭代器
(1)第一种方法__iter__()
str1="abcdegggg" list1=[1,3,4,5] obj_str=str1.__iter__() obj_list=list1.__iter__() print(obj_str) print(obj_list) 结果为: <str_iterator object at 0x00000234253C83C8> <list_iterator object at 0x00000234253C89E8>
(2)第二种方法iter()
str1="abcdegggg" list1=[1,3,4,5] obj_str=iter(str1) obj_list=iter(list1) print(obj_str) print(obj_list) 结果为: <str_iterator object at 0x00000170FF5B8240> <list_iterator object at 0x00000170FF5B83C8>
4 判断对象是不是迭代器
(1)内部含有__iter__ 且含有__next__方法的对象就是迭代器,遵循迭代器协议
str1="abcdegggg" list1=[1,3,4,5] obj_str=str1.__iter__() obj_list=list1.__iter__() print('__iter__' in dir(str1)) print('__next__' in dir(str1)) print('__iter__' in dir(obj_str)) print('__next__' in dir(obj_str)) 结果为: True False True True
可以看到,str1虽然是可迭代对象,但是内部不含有__next__方法,所以不是迭代器
(2)isinstance(obj_list,Iterable)
from collections import Iterable list1=[1,3,4,5] obj_str=str1.__iter__() obj_list=list1.__iter__() print(isinstance(list1,Iterable)) print(isinstance(obj_list,Iterable)) print(isinstance(124,Iterable)) 结果为: True True False
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)