Python 迭代器【iterator】

# 1.迭代器 iterator --> 用来遍历数据 【我们日常的软件都是不断迭代的】【可以通过for循环遍历的对象都是可迭代对象
tmp_list = [1, 2, 3, 4, 5, 6]
# mac command + 单击 可查看源码
 
# iter()  这个内置函数用来获取一个 可迭代对象 的迭代器
lst_iter = iter(tmp_list)
print(lst_iter)  # <list_iterator object at 0x10be82430>
 
# 通过迭代器读取数据时,需要使用 next() 该函数每次执行一次,就会通过迭代器读取一个数据
print(next(lst_iter))
print(next(lst_iter))
print(next(lst_iter))
print(next(lst_iter))
for n in lst_iter:
    print(n)
 
# 迭代器好处:更加节省内存 类似range
 
# 自己实现一个迭代器
class TestIterator:
 
    def __init__(self):
        self.num = 0
 
 
    def __next__(self):  # 迭代器中都含有一个 __next__ 方法,当我们通过next()来读取数据时,实际就是调用迭代器的__next__
        self.num += 1
        if self.num >= 11:
            # 迭代器中手动终止迭代,需要手动抛出 StopIteration
            raise StopIteration
        return self.num
 
 
    def __iter__(self):  # 一个对象是不是可迭代对象,就看它有没有实现 iter 特殊方法,且返回的必须是迭代器
        # return iter('test')  # 用来构建测试
        return self
 
ti = TestIterator()
 
ti_ = iter(ti)  # iter() 只能获取可迭代对象的迭代器
for n in ti_:
    print(n)
 
# 自己实现一个range
class MyRange:
    def __init__(self, end, start=-1):
        self.start = start
        self.end = end
 
    def __iter__(self):
        return self
 
    def __next__(self):
        self.start += 1
        if self.start >= self.end:
            raise StopIteration
        return self.start
 
mr = MyRange(10)
print("self make a test range.........")
for n in mr:
    print(n) 

 

 
posted @ 2022-08-12 11:09  以赛亚  阅读(347)  评论(0编辑  收藏  举报