一、迭代器
迭代、就是遍历。
迭代(或者遍历)特定范围内的数是一种常见的任务。
可迭代对象就是可用for循环进行遍历的对象。
我们先看一个简单的示例:
这是一个简单的for循环语句,在这个for循环中,我们即没有给i赋初始值,也没有给i赋终止值,也没有让i每次都加1,为什么程序在循环输出中就能从0输出到5呢?
因为range()函数会生成一个可迭代对象,range()函数内部会根据参数生成初始值、终止值并在每次循环时改变这个值的大小,我们可以实现一个自己的range()函数,为了不和range重名我们命名为myrange()。
由于涉及到对象,编写自己的迭代器时涉及到python中面向对象的基本概念,如果你对python中面向对象的基本概念还不清楚,可以点击这里。
二、迭代器的特点
1、一个标准的迭代器
class Fibs:
def __init__(self):
self.a = 0
self.b = 1
def __next__(self): #__next__用于返回下一个,返回下一个才能被称之为迭代器。
self.a, self.b = self.b, self.a + self.b
return self.a
def __iter__(self): #__iter__用于返回自身,返回自身才能被调用。
return self
fibs = Fibs()
for f in fibs:
if f < 10:
print(f)
2、迭代器走到头以后将什么都不会被打印出
class TestIterator:
value = 0
def __next__(self):
self.value += 1
if self.value > 10: raise StopIteration
return self.value
def __iter__(self):
return self
ti = TestIterator()
for i in ti:
print(i)
###迭代器迭代到最后就会停止,如果想从头开始必须重新创建迭代器
###下面的循环什么都不会打印出来
print("xxx")
for i in ti:
print(i)
3、如果迭代器没有走到最后,下一次将从上次结束的地方开始
class TestIterator:
value = 0
def __next__(self):
self.value += 1
if self.value > 10: raise StopIteration
return self.value
def __iter__(self):
return self
ti = TestIterator()
for i in ti:
if i < 5:
print(i)
if i == 4: break
###迭代器如果没有走到最后,下一次将从上次停止的地方开始
print("xxx")
for i in ti:
print(i)
看完了迭代器,我们再来认识一下python中的生成器
欢迎收看:如何自学人工智能