高大上的迭代器

作者:计算机知识

ls = list(i for i in range(10))        ####快快创造了一个里头都以整数的list

迭代器

迭代是访问集结成分的1种办法。迭代器是三个足以记住遍历的岗位的指标。迭代器对象从集合的第一个因素开端访问,直到所有的要素被访问完结束。迭代器只可以往前不会后退

只顾迭代器和可迭代对象不相同
#迭代器:1、有iter方法,2、有next方法
li=[1,2,3,4,5]
高大上的迭代器。d=iter(li) # 等于li.__iter__()
print(d)  # <list_iteratorobjectat0x00000174316CC3C8>
能够因此next方法收取成分。
for循环就是那般的。
for循环内部做的叁件事
一、调用iter方法放回一个要素
二、不断调用迭代器对象的next方法
3、处理StopIteration异常

 

ln = list(str(i) for i in range(10))  ####立时创造了二当中间都是字符串的list

可迭代的目的

以直接效果于for循环的数据类型有以下二种:

壹类是会面数据类型,如list、tuple、dict、set、str等;

一类是generator,包涵生成器和带yield的generator function。

这几个能够直接成效于for循环的靶子统称为可迭代对象:Iterable。

源文档 <;
演练壹:使用文件读取,寻觅文件中最长的行的?

dir方法  打字与印刷出该类型的享有办法

看清是还是不是足以迭代

能够采用isinstance()剖断三个指标是不是是Iterable对象:

图片 1

而生成器不但能够功能于for循环,还是可以被next()函数不断调用并赶回下一个值,直到最终抛出StopIteration错误表示不可能持续回到下三个值了。

图片 2图片 3

print(dir([]))
print(dir(()))
print(dir({}))
print(dir(int))

iter()函数

生成器都以Iterator对象,但list、dict、str就算是Iterable,却不是Iterator。

把list、dict、str等Iterable形成Iterator能够行使iter()函数:

图片 4

总结

·凡是可效果于for循环的靶子都以Iterable类型;

·凡是可职能于next()函数的对象都是Iterator类型

·集结数据类型如list、dict、str等是Iterable但不是Iterator,不过能够经过iter()函数得到1个Iterator对象。

·指标是在选用集结的时候,减弱占用的原委。

max(  len(x.strip())  for  x  in  open('test.log')  )

图片 5中间,游痛症划线的法子,举个例子__name__措施被称作双下方法,此类措施是由c编程,运维作效果用快。

答案

里头,只要能运用for循环的格局的数据类型一定有__iter__方法

 

python规定,只要个中有__iter__艺术的数据类型就叫做可迭代,他们都具有可迭代协议

本文由bwin必赢发布,转载请注明来源

关键词: 日记本 Python python学习 编程语言 必赢亚洲56.net