python 迭代器和可迭代对象_python——迭代器与可迭代对象

一、可迭代对象

1.  可以直接作用于 for 循环的对象统称为可迭代对象:Iterable

2.  可直接作用于 for 循环的对象:

一类是集合数据类型:list、tuple、dict、set、str等

一类是 generator,包括生成器和带 yield 的 generator function

3.  可以通过 isinstance()函数,判断是否为可迭代对象 Iterable

>>> from collections.abc import Iterable

>>> isinstance([],Iterable)#判断list

True

>>> isinstance({},Iterable)#判断dict

True

>>> isinstance('abc',Iterable)#判断str

True

>>> isinstance((x for x in range(10)),Iterable)#判断generator

True

>>> isinstance(100,Iterable)#判断数字

False

>>> isinstance((),Iterable)

True

二、迭代器

1.  可以被 next()函数调用,并且不断返回下一个函数值的对象称为迭代器:Iterator

2.  生成器 generator 都是迭代器,但是 list、tuple、dict、set、str等不是迭代器

3.  可以通过 isinstance()函数判断一个对象是否为 Iterator 对象

>>> from collections.abc import Iterator

>>> isinstance([],Iterator)#判断list

False

>>> isinstance((),Iterator)#判断tuple

False

>>> isinstance((x for x in range(10)),Iterator)#判断generator

True

>>> isinstance('abc',Iterator)#判断str

False

4.  把list、tuple、dict、set、str等可迭代对象Iterable变成Iterator,可以用 iter()函数

>>> isinstance(iter([]),Iterator)

True

>>> isinstance(iter({}),Iterator)

True

Iterable可以通过 iter()函数得到一个 Iterator对象

5.  Python的 Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出 StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

6.  python中 for循环的本质是通过不断调用 next()函数实现的

  • 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、付费专栏及课程。

余额充值