python的迭代对象(iterable)和迭代器(iterator)

python的迭代对象(iterable)和迭代器(iterator)
摘要由CSDN通过智能技术生成

list 呢它本身是一个有序的结构, 那你 for in 来拿的话, 可以是第零个, 第一个, 第二个这个事儿比较符合直觉, 但是我们知道 dictionary 也可以这么用, 那 dictionary 可不是按顺序的给你摆在这儿, 第一个给你摆在这儿的, 对不对, 他怎么也可以用这个 for in 的结构呢, 甚至包括在 python 中打开的文件都可以用 for in 的结构, 那么知道文件肯定是一个相对来说比较复杂的数据结构了对吧, 他肯定也不是给你标好了, 第零个, 第一个, 第二个他怎么也能这么用呢, 那我们今天就来揭示这件事背后的秘密哦, 在 for loop 实现背后呢有两个核心概念, 一个叫可迭代对象, 一个叫迭代器。

先来看官方 doc 的解释,iterable 也就是可迭代对象, 他说的是一个对象, 然后可以一个一个的返回他的成员, 他给了一些例子吧, 比如说 list string tuple 啊, 包括 dictionary 啊, 然后他还特别强调了对吧, 这个 iterable 可以在 for loop 里面使用, 当然确切的说是 for loop 里面 in 后面那个东西必须是一个 iterable, 也就是必须是一个可迭代对象

An object capable of returning its members one at a time. Examples of iterables include all sequence types (such as [`list`]( https://docs.python.org/3/library/stdtypes.html#list "list"), [`str`]( https://docs.python.org/3/library/stdtypes.html#str "str"), and [`tuple`]( https://docs.python.org/3/librar
  • 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、付费专栏及课程。

余额充值