迭代器

 

一 迭代器

迭代器是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
复制代码

 

posted @   Sunzz  阅读(127)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示