Python 迭代器

Python 迭代器

一、 什么是迭代器

是一组数据结构,可以利用它们的索引从0开始一直“迭代”到序列的最后一个条目。

二、为什么要迭代器

    1.  提供了可扩展的迭代器接口
    2.  对列表迭代带来了性能上的增强
    3.  创建真正的迭代接口,而不是原来的随机对象访问
    4.  与所有已经存在的用户定义的类以及扩展的模拟序列和映射的对象向后兼容
    5.  迭代非序列集合(映射和文件)时,方便和可读性高

三、如何迭代

迭代器有一个 **next()** 方法的对象,而不是通过索引来计数。
当使用循环机制(for语句)需要下一个项时,调用迭代器的next()方法就可以获得它。条目全部取出后,会引发一个StopIteration异常。
迭代器的限制,不能向后移动,不能回到开始,不能复制一个迭代器,**如果需要再次迭代用一个对象,只能重新创建另一个迭代器对象。**
**reversed()** 将返回一个反序访问的迭代器。
**enumerate()** 通用返回迭代器
**any(),all()** 如果迭代器中某个/全部值都是布尔真的话,则它们返回值为值。

四、使用迭代器

1. 序列
        #!/usr/bin/env python
        myTuple = (123, 'xyz', 45.67)
        i = iter(myTuple)
        print (next(i))
        print (next(i))
        print (next(i))
        print (next(i))  #->StopIteration 
        for i in iter(myTuple):
        print (i)
  1. 字典
#遍历字典
kegends = {
    ("a", "b"):(1809,1849),
    ("c", "d"):(1852,1906)
}
# 遍历的是Key
for eachLegend in kegends:
    print ("Name:%s\tOccupation:%s" % eachLegend)
遍历key:iterkeys()
遍历value:itervalues()
遍历item:iteritems()

3.  文件
    文件对象生成的迭代器会自动调用readline()方法。
#遍历文件
myFile = open('iter_txt.txt', 'r') 

for line in myFile:
    print(line, end='')
print()

五、可变对象和迭代器

在迭代可变对象的时候修改它们不是一个好的主意;一个序列的迭代器只是记录当前到底第几个元素了,所以如果在迭代的时改变了元素,更新会立即反映到所迭代的条目上。

六、如何创建迭代器

  1. 对一个对象调用item()就可以创建它的迭代器
iter(iterable)
iter(callable, sentinel)

如果传递的是一个序列,那么就根据索引从0一直迭代到序列结束
如果传入的是自定义的类,这个类需要实现 _ _ iter_ _ ()和 _ _ next()_ _()方法。

如果传递两个参数给iter(), 它会重复地调用callable,直到迭代器的下一个值为sentinel。

7、 代码地址

github:python_cookbook\python_knowledge\iter_knodledge.py

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在Python中,迭代器是一种用于遍历可迭代对象的对象。一个对象要成为迭代器,需要实现两个方法:__iter__和__next__。__iter__方法返回迭代器本身,而__next__方法返回下一个迭代器对象。\[1\] 迭代器本身也是可迭代的,所以它也要实现__iter__方法并返回自身。\[1\] 一个对象只有同时实现了__iter__和__next__方法,才能被称为迭代器。\[1\] 在Python中,可迭代对象是指实现了__iter__方法的对象。可迭代对象可以使用isinstance()函数来判断是否是可迭代对象。\[1\] 迭代器是可迭代对象的一种特殊形式,它具有返回下一个迭代器对象的功能。\[2\] 可以使用isinstance()函数来判断一个对象是否是迭代器。\[2\] 下面是一个示例代码,展示了如何实现一个迭代器和一个可迭代对象: ```python class MyIterator: def __init__(self, data): self.data = data self.index = 0 def __iter__(self): return self def __next__(self): if self.index >= len(self.data): raise StopIteration value = self.data\[self.index\] self.index += 1 return value class MyIterable: def __init__(self): self.data = \[\] def add(self, item): self.data.append(item) def __iter__(self): return MyIterator(self.data) myIterable = MyIterable() myIterable.add(1) myIterable.add(2) myIterable.add(3) print(isinstance(myIterable, Iterable)) # 输出True,表示myIterable是可迭代对象 print(isinstance(myIterable, Iterator)) # 输出False,表示myIterable不是迭代器 for item in myIterable: print(item) # 输出1、2、3 ``` 在上面的示例中,MyIterator是一个迭代器,它实现了__iter__和__next__方法。MyIterable是一个可迭代对象,它实现了__iter__方法并返回一个迭代器对象。通过使用isinstance()函数,我们可以判断一个对象是否是可迭代对象或迭代器。\[1\]\[2\] #### 引用[.reference_title] - *1* [Python迭代器Iterator)](https://blog.csdn.net/weixin_45068714/article/details/126863082)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Python 迭代器Iterator)](https://blog.csdn.net/qq_45807032/article/details/105219674)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值