Python3 魔法方法:迭代器

Posted warms

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3 魔法方法:迭代器相关的知识,希望对你有一定的参考价值。

0、什么是迭代器

迭代器不是容器,而是实现了__next__方法的对象(用于遍历容器中的数据)

在python原生支持的数据结构中set(集合)是仅支持迭代器访问的,不支持下标(index)访问

1、相关的BIF

iter()

将一个可迭代对象转换成一个迭代器

next()

访问迭代器中的下一个变量,如果迭代器没有变量了,则返回StopIteration异常

2、魔法方法

__iter__(self)

返回迭代器本身

__next__(self)

决定迭代的方法

3、例题:

用while语句实现与下年for语句相同的功能

for each in range(5):
    print(each)


alist = range(5)
it = iter(alist)
#-----------------------------------
while True:
    try:
        print(next(it))
    except StopIteration:
        break

写一个迭代器输出至今位置所有闰年

class LeapYear:
    def __init__(self):
        self.year_now=2018
    def __iter__(self):
        return self
    def __next__(self):
        self.year_now-=1
        if self.year_now % 4==0 and self.year_now%100!=0 or self.year_now%400==0:
            return self.year_now
        else:
            return self.__next__()
            
        




leapYears = LeapYear()
for i in leapYears:
    if i >=2000:
            print(i)
    else:
        break
import datetime as dt

class LeapYear:
    def __init__(self):
        self.now = dt.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 self.isLeapYear(self.now):
            self.now -= 1 

        temp = self.now
        self.now -= 1
        
        return temp

写一个MyRev类功能与reserved()相同

class MyRev:
    def __init__(self,seq):
        self.seq=seq
        self.index=0
    def __iter__(self):
        return self
    def __next__(self):
        self.index-=1
        try:
            return self.seq[self.index]
        except IndexError:
            raise StopIteration
myRev = MyRev("ABCDE")
for i in myRev:
    print(i, end=‘‘)
class MyRev:
    def __init__(self, data):
        self.data = data
        self.index = len(data)
        
    def __iter__(self):
        return self
    
    def __next__(self):
        if self.index == 0:
            raise StopIteration

        self.index = self.index - 1
        return self.data[self.index]

 

以上是关于Python3 魔法方法:迭代器的主要内容,如果未能解决你的问题,请参考以下文章

课时48:魔法方法:迭代器

十魔法方法特性和迭代器

Python48--魔法方法:迭代器&生成器

python魔法方法构造函数序列与映射迭代器生成器

魔法方法特性和迭代器

(10)魔法方法属性迭代器