python学习笔记维小维写作训练营

迭代器

2019-10-21  本文已影响0人  书生_Scholar

1. 判断迭代

# coding=utf-8
"""
1.判断xxxx_obj是否可以迭代
2.在第一步成立的前提下,调用iter函数得到xxx_obj对象的__iter__方法的返回值
3.__iter__方法的返回值是一个迭代器
"""
from collections.abc import Iterable
from collections.abc import Iterator
import time


class Classmate(object):
    def __init__(self):
        self.names = list()

    def add(self, name):
        self.names.append(name)

    def __iter__(self):
        return ClassIterator(self)


class ClassIterator(object):

    def __init__(self, obj):
        self.obj = obj
        self.current_num = 0

    def __iter__(self):
        pass

    def __next__(self):
        if self.current_num < len(self.obj.names):
            ret = self.obj.names[self.current_num]
            self.current_num += 1
            return ret
        else:
            raise StopIteration


classmate = Classmate()
classmate.add("laowang")
classmate.add("laoli")
classmate.add("laosan")

# print("是否可迭代:", isinstance(classmate, Iterable))
#
# classmate_iterator = iter(classmate)
# print("是否迭代器:", isinstance(classmate_iterator, Iterable))
# print(next(classmate_iterator))

for name in classmate:
    print(name)
    time.sleep(1)


2. 简化

# coding=utf-8
"""
1.判断xxxx_obj是否可以迭代
2.在第一步成立的前提下,调用iter函数得到xxx_obj对象的__iter__方法的返回值
3.__iter__方法的返回值是一个迭代器
"""
from collections.abc import Iterable
from collections.abc import Iterator
import time


class Classmate(object):
    def __init__(self):
        self.names = list()
        self.current_num = 0

    def add(self, name):
        self.names.append(name)

    def __iter__(self):
        return self

    def __next__(self):
        if self.current_num < len(self.names):
            ret = self.names[self.current_num]
            self.current_num += 1
            return ret
        else:
            raise StopIteration


classmate = Classmate()
classmate.add("laowang")
classmate.add("laoli")
classmate.add("laosan")
classmate.add("李四")
classmate.add("张流森")
# print("是否可迭代:", isinstance(classmate, Iterable))
#
# classmate_iterator = iter(classmate)
# print("是否迭代器:", isinstance(classmate_iterator, Iterable))
# print(next(classmate_iterator))

for name in classmate:
    print(name)
    time.sleep(1)


3. Fibonacci数列

# coding=utf-8
import time


class Fibonacci(object):

    def __init__(self, num):
        self.current = 0
        self.num = num
        self.a = 0
        self.b = 1

    def __iter__(self):
        return self

    def __next__(self):

        if self.current < self.num:
            ret = self.a
            self.a, self.b = self.b, self.a+self.b
            self.current += 1
            return ret
        else:
            raise StopIteration


fib = Fibonacci(88)

for i, n in enumerate(fib):
    print(i, n)
    time.sleep(1)




上一篇下一篇

猜你喜欢

热点阅读