一、切片
L[0:3:1]
表示,从索引0
开始取,直到索引3
为止,但不包括索引3,其中步长为1
。即索引0
,1
,2
,正好是3个元素-1
0
,还可以省略二、迭代
for
循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)for value in d.values()
,如果要同时迭代key和value,可以用for k, v in d.items()
list
、tuple
、dict
、set
、str
等generator
,包括生成器和带yield
的generator functionisinstance(‘abc‘, Iterable) # str是否可迭代
三、生成器
next()
,而是通过for
循环来迭代它,并且不需要关心StopIteration
的错误yield
关键字,那么这个函数就不再是一个普通函数,而是一个generatorreturn
语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()
的时候执行,遇到yield
语句返回,再次执行时从上次返回的yield
语句处继续执行for
循环调用generator时,发现拿不到generator的return
语句的返回值。如果想要拿到返回值,必须捕获StopIteration
错误,返回值包含在StopIteration
的value
中四、迭代器
next()
函数调用并不断返回下一个值的对象称为迭代器:Iterator
isinstance()
判断一个对象是否是Iterator
对象Iterator
对象,但list
、dict
、str
虽然是Iterable
,却不是Iterator
list
、dict
、str
等Iterable
变成Iterator
可以使用iter()
函数五、小结
for
循环的对象都是Iterable
类型(可迭代)next()
函数的对象都是Iterator
类型,它们表示一个惰性计算的序列list
、dict
、str
等是Iterable
但不是Iterator
,不过可以通过iter()
函数获得一个Iterator
对象Iterator
对象表示的是一个数据流,Iterator对象可以被next()
函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration
错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()
函数实现按需计算下一个数据,所以Iterator
的计算是惰性的,只有在需要返回下一个数据时它才会计算原文:https://www.cnblogs.com/jayce9102/p/12162867.html