码迷,mamicode.com
首页 > 编程语言 > 详细

Python3 魔法方法:迭代器

时间:2018-02-10 19:28:03      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:异常   可迭代对象   __next__   pytho   color   对象   log   ali   iter   

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 魔法方法:迭代器

标签:异常   可迭代对象   __next__   pytho   color   对象   log   ali   iter   

原文地址:https://www.cnblogs.com/PythonFCG/p/8439395.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!