python迭代器 - 1

判断一个数据类型是否是可以迭代的

  • 判断一个数据类型是否可以迭代, 需要判断是否是Iterable的子类
    • from collections import Iterable
  • 使用 isinstance 方法
    • isinstance 判断一个对象是否是另一个对象创建出来的
    • isinstance([11, 22, 33], Iterable)
  • 判断一个对象是否是一个迭代器, 需要判断是否是 Iterator的子类
    • isinstance(classmate, Iterator)

自己创建一个类, 创建一个对象, 用for循环遍历这个对象

class Classmate():
    def __init__(self):
        self.classlist = []

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


classmate = Classmate()
classmate.add('小1')
classmate.add('小2')
classmate.add('小3')
for name in classmate:
    print(name)
  • 报错 : TypeError: 'Classmate' object is not iterable
  • 普通的类是不可以迭代的

在类里面添加一个 __iter__方法, 让对象成为一个可以迭代的对象

  • 这个方法里面必须返回一个具有__iter__方法和__next__方法对象的引用
  • 调用iter函数可以得到classmate对象的__iter__方法的返回值
  • __iter__方法的返回值是一个迭代器
class Classmate():
    def __init__(self):
        self.names = []

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

    def __iter__(self):
        return ClassIterator()


class ClassIterator(object):
    def __iter__(self):
        pass

    def __next__(self):
        return 11


classmate = Classmate()
classmate.add("小1")
classmate.add('小2')
classmate.add('小3')

# 此时classmate_iterator就是一个迭代器
classmate_iterator = iter(classmate)
next(classmate_iterator )
  • 使用next()方法会自动调用指定的对象里面的__next__方法
  • 打印 11
我们的目的是打印names里面的数据,那么在ClassIterator类的__next__方法里面, 怎么才能访问到Classmate的列表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值