python迭代器和可迭代对象

文章介绍了Python中可迭代对象的概念,如列表、元组和字符串,它们支持iter()方法生成迭代器。迭代器是通过next()方法逐个返回元素的对象。文章还展示了如何判断一个对象是否为可迭代或迭代器,并通过实例演示了使用for循环遍历列表和创建斐波那契数列的迭代器。
摘要由CSDN通过智能技术生成

可迭代对象

定义:可迭代对象是指那些可以通过 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 # 否则停止迭代



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,迭代器(iterator)和可迭代对象(iterable)是两个重要的概念。 可迭代对象是指实现了__iter__()方法的对象,该方法返回一个迭代器。例如,列表、元组、字典、集合、字符串等都是可迭代对象迭代器是指实现了__next__()方法的对象,该方法返回迭代器的下一个元素。如果没有元素可以迭代,则抛出StopIteration异常。例如,Python中的内置函数range()返回的就是一个迭代器对象。 可以使用for循环遍历可迭代对象,for循环会自动调用可迭代对象的__iter__()方法获取迭代器,然后不断调用迭代器的__next__()方法获取下一个元素,直到StopIteration异常被抛出。 示例代码: ``` # 定义一个可迭代对象 class MyIterable: def __init__(self): self.data = [1, 2, 3] def __iter__(self): return MyIterator(self.data) # 定义一个迭代器 class MyIterator: def __init__(self, data): self.data = data self.index = 0 def __next__(self): if self.index >= len(self.data): raise StopIteration value = self.data[self.index] self.index += 1 return value # 使用for循环遍历可迭代对象 my_iterable = MyIterable() for item in my_iterable: print(item) ``` 上述代码中,MyIterable是一个可迭代对象,实现了__iter__()方法返回MyIterator对象。MyIterator是一个迭代器,实现了__next__()方法返回下一个元素。使用for循环遍历可迭代对象时,会自动调用MyIterable的__iter__()方法获取迭代器,然后不断调用MyIterator的__next__()方法获取下一个元素,直到StopIteration异常被抛出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值