iter-Python


在Python中,iter是一个内置函数,用于获取一个可迭代对象的迭代器,以下是具体介绍:

基本用法

  • iter函数的语法为iter(object[, sentinel]),其中object是必需的参数,指定要转换为迭代器的可迭代对象或支持迭代协议的对象;sentinel是可选参数,用于指定一个标记值,当迭代器遇到该标记值时停止迭代。
  • 当只传递一个参数object时,iter函数会返回该对象的迭代器。例如,对于列表、元组、字符串等可迭代对象,可以使用iter函数获取它们的迭代器,然后通过next函数逐个获取元素:
my_list = [1, 2, 3, 4, 5]
my_iter = iter(my_list)
print(next(my_iter))  
print(next(my_iter))  

__iter__方法的关系

  • 在Python中,可迭代对象是指实现了__iter__方法的对象,该方法返回一个迭代器对象。当对一个可迭代对象使用iter函数时,实际上是调用了该对象的__iter__方法来获取迭代器。
  • 例如,我们可以自定义一个可迭代对象,在类中实现__iter__方法:
class MyIterable:
    def __init__(self):
        self.data = [1, 2, 3, 4, 5]

    def __iter__(self):
        self.index = 0
        return self

    def __next__(self):
        if self.index >= len(self.data):
            raise StopIteration
        result = self.data[self.index]
        self.index += 1
        return result

my_obj = MyIterable()
my_iter = iter(my_obj)
for num in my_iter:
    print(num)

使用iternext模拟循环

  • 可以使用iternext函数来模拟for循环的行为。通过不断调用next函数获取迭代器的下一个元素,直到遇到StopIteration异常,表示迭代结束:
my_list = [1, 2, 3, 4, 5]
my_iter = iter(my_list)
while True:
    try:
        num = next(my_iter)
        print(num)
    except StopIteration:
        break

自定义迭代器的终止条件

  • 当使用iter函数的两个参数形式时,可以自定义迭代器的终止条件。iter函数会不断调用对象的__next__方法,直到返回的值等于sentinel指定的值:
class MyIterator:
    def __init__(self):
        self.count = 0

    def __next__(self):
        self.count += 1
        if self.count > 5:
            return None
        return self.count

my_iter = iter(MyIterator(), None)
for num in my_iter:
    print(num)