迭代器
一 迭代器
迭代器是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

浙公网安备 33010602011771号