第048讲: 魔法方法:迭代器 | 学习记录(小甲鱼零基础入门学习Python)

(标答出处: 鱼C论坛)
《零基础入门学习Python》

本节知识点:

iterator 是迭代器。 
迭代器有两种方法: 
(1)iter(可迭代的对象):返回一个迭代器 
(2)next(迭代器): 返回迭代器的下一个元素,若果迭代器为空,将引发StopIteration

例子:

>>> string = "zss041962"
>>> iter(string)
<str_iterator object at 0x0000000002F53B38>
>>> iter(range(10))
<range_iterator object at 0x0000000002F2EFD0>

>>> it = iter(range(10))
>>> next(it)
0
>>> next(it)
1

斐波那契数列:

class Fibs :
    def __init__(self,n=10) :
        self.a = 0
        self.b = 1
        self.n = 10

    def __iter__(self) :
        return self

    def __next__ (self) :
        self.a , self.b = self.b , self.a + self.b
        if  self.a <= self.n :
            return self.a
        else :
            raise StopIteration


fibs = Fibs()
for i in fibs :
    print (i)

运行结果:
在这里插入图片描述
测试题(不上机):
在这里插入图片描述
答:迭代是重复反馈过程的活动,其目的是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次迭代,而每一次迭代得到的结果会被用来当做下一次迭代的初始值。
在这里插入图片描述
答:不是。因为我们熟知的容器,如:列表,字典等。他们都是可以存数据的,而迭代器只是实现了 __ next __方法的对象,用于容器中内容的遍历。
在这里插入图片描述
答:不可以,迭代器不可以回退
在这里插入图片描述
答:观察这个容器是否有 __ iter __ 和 __ next __方法。
在这里插入图片描述
答:看是否抛出StopIteration异常
在这里插入图片描述
答:set,对于原生支持随机访问的数据结构(如:tuple,list),可以使用迭代器或者下表索引的形式访问,但对于无法随机访问的数据结构set而言,迭代器是唯一的访问元素的方式。

动动手:
第048讲: 魔法方法:迭代器 | 学习记录(小甲鱼零基础入门学习Python)_第1张图片

l1 = range (5)
t = iter(l1)
while True :
    try :
        print (next(t))
    except StopIteration :
        break

运行结果:
在这里插入图片描述
第048讲: 魔法方法:迭代器 | 学习记录(小甲鱼零基础入门学习Python)_第2张图片

import datetime as d

class LeapYear : 
    def __init__ (self) :
        self.now = d.date.today().year
    
    def isleapyear (self,year):
        if (year % 4 == 0 and year %100 != 0) or (year % 400 == 0) :
            return True
        else :
            return False

    def __iter__ (self) :
        return self
    
    def __next__(self) :
        while not LeapYear.isleapyear(self,self.now) :
            self.now -= 1
        #使用临时变量来接收闰年的年份
        temp = self.now
        self.now -= 1
        return temp
        

leapyear = LeapYear()
for i in leapyear :
    if i >= 2000 :
        print (i) 
    else :
        break

运行结果:
在这里插入图片描述
第048讲: 魔法方法:迭代器 | 学习记录(小甲鱼零基础入门学习Python)_第3张图片

class MyRev :
    def __init__ (self , seq) :
        self.seq = seq
        self.index = len(self.seq)

    def __iter__(self) :
        return self 
    
    def __next__(self) :
        if  self.index == 0 :
            raise StopIteration
        else :
            self.index = self.index - 1
        return self.seq[self.index]

myrev = MyRev('I love XMY')

for i in myrev :
    print (i,end='')

运行结果:
在这里插入图片描述

你可能感兴趣的:(第048讲: 魔法方法:迭代器 | 学习记录(小甲鱼零基础入门学习Python))