zoukankan      html  css  js  c++  java
  • 可迭代对象_迭代器

      迭代:一次迭代就是一次对过程的重复,并且每次迭代的结果都将作为下一次迭代的初始值.

    可迭代对象(iterable)
    标志:__iter__(),返回值是迭代器.
    作用:可以参与for
    迭代器(iterator)
        标志:__next__(),返回值是聚合对象的元素
    作用:可以迭代(挨个取元素)

    1.for循环原理

    iterable = [1, 2, 3, 4]
    iterator = iterable.__iter__()
    while True:
        try:
            item = iterator.__next__()
            print(item)
        except StopIteration:
            break

    首先,调用可迭代对象的__iter__方法,得到一个迭代器对象;
    接着,在死循环while True中调用迭代器对象的__next__方法,以迭代的方式依次得到迭代器中的元素.
    最后,当执行__next__方法的时候抛出异常了,终止循环.

    2.__iter__方法和__next__方法的具体实现

    # 1. 创建拥有__iter__方法的可迭代对象
    class SkillManager:
        def __init__(self):
            self.__list_skill = []
    
        def add_skill(self, skill):
            self.__list_skill.append(skill)
    
        def __iter__(self):
            return  SkillIterator(self.__list_skill)
    
    # 2. 创建自定义迭代器
    class SkillIterator:
        def __init__(self, list_target):
            self.__list_target = list_target
            self.__index = -1  
    
        def __next__(self):
            if self.__index < len(self.__list_target) - 1:
                self.__index += 1
                return self.__list_target[self.__index]
            else:
                raise StopIteration     # for循环实际调用__next__方法时,是在一个死循环中,我们采用抛出异常的方法来终止死循环
    
    # 使用for循环一次得到可迭代对象中的元素
    iterable = SkillManager()
    iterable.add_skill("九阳神功")
    iterable.add_skill("乾坤大挪移")
    iterable.add_skill("九阴白骨爪")
    for item in iterable:
        print(item)
  • 相关阅读:
    左偏树
    论在Windows下远程连接Ubuntu
    ZOJ 3711 Give Me Your Hand
    SGU 495. Kids and Prizes
    POJ 2151 Check the difficulty of problems
    CodeForces 148D. Bag of mice
    HDU 3631 Shortest Path
    HDU 1869 六度分离
    HDU 2544 最短路
    HDU 3584 Cube
  • 原文地址:https://www.cnblogs.com/NeverYa/p/11220996.html
Copyright © 2011-2022 走看看