当我们需要遍历一个可迭代对象(比如列表,元组,字符串或生成器)时,可以使用Python中的iter
函数将其转化为一个迭代器对象。迭代器可以一个一个返回可迭代对象中的值,当所有值迭代完毕时,会引发StopIteration
异常。
下面是使用iter
函数的基本语法:
it = iter(iterable)
其中,iterable
表示可迭代对象,如列表、元组、字符串等,it
表示返回的迭代器对象。
如果我们要迭代打印一个列表中的元素,可以这样写:
lst = [1, 2, 3, 4, 5]
it = iter(lst)
for i in it:
print(i)
以上代码会遍历列表lst
中的所有元素,并打印出来。
当然,我们也可以使用next
函数手动逐个遍历:
lst = [1, 2, 3, 4, 5]
it = iter(lst)
while True:
try:
i = next(it)
print(i)
except StopIteration:
break
以上代码和之前的例子等价,只是使用了next
函数手动逐个遍历。
iter
函数不仅可以将列表、元组、字符串等可迭代对象转化为迭代器,还可以自定义迭代器。比如,我们可以自定义一个返回斐波那契数列的迭代器:
class Fib:
def __init__(self, n):
self.n = n
self.current = 0
self.next = 1
def __iter__(self):
return self
def __next__(self):
if self.current < self.n:
result = self.current
self.current, self.next = self.next, self.current+self.next
return result
else:
raise StopIteration
fib = Fib(10)
for i in fib:
print(i)
以上代码自定义了一个Fib
类,其__iter__
方法返回一个迭代器对象本身,__next__
方法实现斐波那契数列的迭代。在主程序中,我们实例化Fib
类,并使用for
循环遍历打印出斐波那契数列前10项的值。
总结一下,iter
函数可以将可迭代对象转化为迭代器,从而实现对可迭代对象的遍历。除了使用for
循环遍历,还可以使用next
函数手动逐一遍历。也可以自定义迭代器,实现更灵活的迭代器功能。