python基础---迭代器

迭代器

使用for循环遍历一个class

在原来的数据基础上面取下一个

验证一个函数是不是可以迭代, 实际检测的是这一个类里面没有没有__iter__这一个方法

from collections.abc import Iterable
from collections.abc import Iterator
isinstance(测试的类型, Iterable) # 看是不是可迭代的
isinstance(测试的类型, Iterator) # 看是不是一个迭代器

可以使用iter获取一个对象的迭代器, 之后可以使用next依次获取下一个对象

from collections.abc import Iterable
nums = [11, 22, 33, 44, 55]

print(isinstance(nums, Iterable))
# Output: True
iter_obj = iter(nums)
print(isinstance(iter_obj, Iterable))
# Output: True
print(next(iter_obj))
# Output: 11
print(next(iter_obj))
# Output: 22
print(next(iter_obj))
# Output: 33
print(next(iter_obj))
# Output: 44
print(next(iter_obj))
# Output: 55
print(next(iter_obj))
# Output: StopIteration

取数据的时候超出长度的时候会出现一个错误, for循环里面有一个错误处理

自己定义

使用两个方法__iter____next__

__iter__

这一个会返回一个迭代器

__next__

可以返回下一个元素的位置

class MyList(object):
    def __init__(self) -> None:
        self.items = []

    def add(self, item):
        self.items.append(item)
    
    def __iter__(self):
        return MyIterator(self)
    
class MyIterator(object):
    def __init__(self, my_list) -> None:
        self.index = 0
        self.my_list = my_list

    def __next__(self):
        if self.index < len(self.my_list.items):
            item = self.my_list.items[self.index]
            self.index += 1
            return item
        else:
            raise StopIteration
            
    def __iter__(self):
        return self
    
my_list = MyList()
my_list.add(4)
my_list.add(5)
my_list.add(6)

for i in my_list:
    print(i)
# Output:
# 4
# 5
# 6

这里使用两个类的时候, 这一个类可以多次被for循环调用

其他使用

不只是for循环可以使用迭代器, list()之类的函数也可以使用迭代器

list2 = list(my_list)
print(list2)
PS E:\JHY\python\2024-4-22> python -u "e:\JHY\python\2024-4-22\main.py"
[4, 5, 6]
  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值