请稍候,加载中....

迭代器对象

字符串、列表、元组、字典、集合、文件打开的对象,都可以通过for... in ...遍历其中的成员

for element in [1, 2, 3]:
    print(element)
for element in (1, 2, 3):
    print(element)
for key in {'one':1, 'two':2}:
    print(key)
for i in set(range(10)):
    print(i)
for char in "123":
    print(char)
# for line in open("myfile.txt"):
#    print(line, end='')

 

iter()函数

通过for循环遍历容器对象container_object的时候,相当于 for ... in iter(container_object)

for i in iter([1,2,3,4]):
     print(i)

iter()函数返回一个迭代器对象,迭代器对象可以通过next()函数逐个访问其中的元素

# iter()函数返回一个迭代器对象,迭代器对象可以通过next()函数逐个访问其中的元素
iter_object = iter([1,2,3,4])
print(iter_object)
# <list_iterator object at 0x10e504190>

# 通过next函数访问,每执行一次next函数,内部元素指针就会向后移一次
next(iter_object)
# 1
next(iter_object)
# 2
# ......

 

__next__内部方法

迭代器对象需要在内部提供一个__next__方法,当执行next()函数时,就会调用__next__()内部方法

# 迭代器对象需要在内部提供一个__next__方法,当执行next()函数时,就会调用__next__()内部方法
iter_object = iter([1,2,3,4])

iter_object.__next__()
# 1

iter_object.__next__()
# 2

iter_object.__next__()
# 3

 

迭代器异常处理

当迭代器迭代到末尾,不在有元素可以迭代时,会产生迭代异常

可以通过try ... except...语句捕捉这个异常

# 处理迭代异常
while True:
    try:
        iter_object.__next__()
    except StopIteration:
        print("迭代结束")
        break

 

自定义迭代器对象

举例: 定义一个对象,只迭代值为偶数的项, 需要实现两个方法,__iter__()__next__()

# 自定义迭代对象
# 只迭代偶数项
class MyList(list):
    def __init__(self, data):
        super().__init__(data)
        self.index = 0  
    # 必须实现
    def __iter__(self):
        return self   
    # 必须实现
    def __next__(self):
        try:
            data = self.__getitem__(self.index)
        except Exception as e:
            raise StopIteration("stop")
        else:
            self.index = self.index + 1
            if  data % 2 == 0:
                return data
            else:
                return 0
mylists = MyList([1,2,3,4,5,6])
print(mylists)
for i in mylists:
    print(i)
# None 2 None 4 None 6

 


Python学习手册-