day01-迭代器

day01-迭代器

1.迭代是什么?
  迭代是访问集合元素的一种方式
  简单来说:就是一种取数据的方式,即在上一个的基础上取下一个

for x in [11,22,33,44,55]
	print(x)

2.迭代器是什么?
  迭代器(Iterator)有时又称游标(cursor)是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。(迭代器只能往前不会后退)

3.什么是可迭代对象
  能够通过for…in…迭代读取数据的对象叫做可迭代对象

4.怎样让一个普通class对象,可以使用for?
  让其成为迭代器,拥有两个魔法方法

__iter__
__next__

5.怎样判断一个对象是否可以迭代
  通过isinstance来判断出是Iterable类的实例,即isinstance的结果是True那么就表示,这个数据类型是可以迭代的数据类型

print(isinstance('halon',Iterable))  #True
print(isinstance(12345,Iterable))  #False
print(isinstance([1, 2, 3, 4],Iterable))  #True
print(isinstance((1, 2, 3),Iterable))  #True
print(isinstance({4, 5, 6},Iterable))  #True

6.怎么判断是否是迭代器

from collections.abc import Iterator
nums = [11, 22, 33, 44]
nums_iter = iter(nums)
# 查看类型
print(type(nums))
print(type(nums_iter))

# 判断是不是迭代器
print("nums", isinstance(nums, Iterator))
print("nums_iter", isinstance(nums_iter, Iterator))

7.__iter__方法
  只要在类中,定义__iter__方法,那么这个类创建出来的对象一定是可迭代对象,即具备了__iter__方法的对象,就是一个可迭代对象

class MyList(object):
    def __init__(self):
        self.container = []

    def add(self, item):
        self.container.append(item)

    def __iter__(self):
        pass

mylist = MyList()
mylist.add(11)
mylist.add(22)
mylist.add(33)

for temp in mylist:
    print(temp)

8.__next__方法
  使用next()函数的时候,调用的就是迭代器对象的__next__方法,一个实现了__iter__方法和__next__方法的对象,就是迭代器

class MyList(object):
    """自定义的一个可迭代对象"""
    def __init__(self):
        self.items = []

    def add(self, val):
        self.items.append(val)

    def __iter__(self):
        myiterator = MyIterator(self)
        return myiterator


class MyIterator(object):
    """自定义的供上面可迭代对象使用的一个迭代器"""
    def __init__(self, mylist):
        self.mylist = mylist
        # current用来记录当前访问到的位置
        self.current = 0

    def __next__(self):
        # 判断是否全部迭代完毕
        if self.current < len(self.mylist.items):
            # 每次获取一个值然后返回
            item = self.mylist.items[self.current]
            self.current += 1
            return item
        else:
            raise StopIteration

    def __iter__(self):
        return self
        
if __name__ == '__main__':
    mylist = MyList()
    mylist.add(1)
    mylist.add(2)
    mylist.add(3)
    mylist.add(4)
    mylist.add(5)
    for num in mylist:
        print(num)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值