可迭代对象
定义:可迭代对象是指那些可以通过 for 循环进行遍历的对象,例如列表、元组、字符串等。这些对象都支持 iter() 方法,返回一个迭代器对象。
#可迭代对象
#实现了__iter__方法,并且该方法返回了一个迭代器对象
str1="abc"
print(dir(str1))
迭代器
定义:迭代器是用于遍历这些可迭代对象的工具,它需要支持 next() 方法,以便不断地返回下一个元素。当使用 for 循环遍历一个可迭代对象时,实际上是通过该对象的 iter() 方法获取到了一个迭代器,然后通过调用迭代器的 next() 方法依次获取每个元素。
#__iter__方法,返回一个迭代器
#str1_iter=str1.__iter__()
str1_iter=iter(str1)
#实现了__iter__和__next__方法就是一个迭代器
print("*"*30)
print(dir(str1_iter))
判断是否是迭代器或可迭代对象
#这种方法也可以判断是否是可迭代对象和迭代器
from collections.abc import Iterable,Iterator
print(isinstance(str1,Iterable))
print(isinstance(str1_iter,Iterator))
#迭代器也是一个可迭代对象
print(isinstance(str1_iter,Iterable))
创建一个迭代器并遍历一个列表
my_list = [1, 2, 3]
my_iterator = iter(my_list)
print(next(my_iterator)) # 输出 1
print(next(my_iterator)) # 输出 2
print(next(my_iterator)) # 输出 3
Python 还提供了一种更简洁的方式来使用迭代器,即通过 for 循环直接遍历可迭代对象
my_list = [1, 2, 3]
for item in my_list:
print(item)
使用迭代器来实现斐波拉契数列
class Fibolacci: # 定义斐波那契序列类
def __init__(self): # 初始化方法
self.num1 = 0 # 初始化变量 num1 为 0
self.num2 = 1 # 初始化变量 num2 为 1
def __iter__(self): # 定义迭代器
return self # 返回当前对象
def __next__(self): # 定义迭代的下一个元素
tmp = self.num2 # 记录下一个元素
self.num2 = self.num1 + self.num2 # 计算出下一个元素
self.num1 = tmp # 记录当前元素,以便下一次计算
return self.num2 # 返回下一个元素
f = Fibolacci() # 创建斐波那契序列类对象
for i in f: # 迭代序列中的元素
if i < 100000000: # 如果下一个元素小于 100000000
print(i) # 将下一个元素打印出来
else:
break # 否则停止迭代