Python协程--迭代器

0. 实现一个可以迭代的对象

1)要想使一个对象实现迭代的功能,须实现__iter__和__next__方法。
2)判断classmate是否是可以迭代的对象:

from collections import Iterable
isinstance(classmate, Iterable)

结果为True则说明是可以迭代的对象,结果为False则说明不是可迭代的对象。

3)判断classmate_iterator是否是迭代器:

from collections import Iterator

classmate_iterator = iter(classmate)
isinstance(classmate_iterator, Iterator)

结果为True则说明是迭代器,结果为False则说明不是迭代器。

4)整体代码如下:


import time
# from collections import Iterable
# from collections import Iterator


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

    def __iter__(self):
        """如果想要一个对象称为一个 可以迭代的对象,即可以使用for,那么必须实现__iter__方法"""
        return self  # 调用iter(xxobj)的时候 只要__iter__方法返回一个 迭代器即可,至于是自己 还是 别的对象都可以的, 但是要保证是一个迭代器(即实现了 __iter__  __next__方法)

    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

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


classmate = Classmate()
classmate.add("老王")
classmate.add("王二")
classmate.add("张三")

# print("判断classmate是否是可以迭代的对象:", isinstance(classmate, Iterable))
# classmate_iterator = iter(classmate)
# print("判断classmate_iterator是否是迭代器:", isinstance(classmate_iterator, Iterator))


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

运行结果:

老王
王二
张三
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值