Python中的迭代器

1、什么是迭代器

迭代,简单理解就是重复的做一些事。迭代器通过__next__()方法访问可迭代对象,从第一个元素开始访问,直到所有的元素都被访问才结束。迭代器只能前进不能后退。使用迭代器不需要事先准备好整个迭代过程中的所有元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后元素可以不存在或者被销毁。因此迭代器适合遍历一些数量巨大序列。

2、可迭代对象

在Python中,内置有__iter__()或者__getitem__()方法的对象都可以称为可迭代对象。iter()的作用是可以通过for循环进行遍历,getitem()则可以让对象通过索引的方式访问对象中的元素。比如常用的,str,list,tuple,dict,set都是可迭代对象。 在Python中可以通过下面的方法判断一个对象是不是可迭代对象

from collections.abc import Iterable

li = [1,2,3,4]
print(isinstance(li,Iterable)) # li为可迭代对象,这里返回True

3、 迭代器

在Python中,内置有__iter__()方法和__next__()方法的对象都可以称为迭代器。next()方法是让对象可以通过next(obj)的方式访问对象中的下一个元素。常用的,str,list,tuple,dict,set都是可迭代对象,但不是迭代器,因为他们都没有__next__()方法。可以通过iter(Iterable)方法创建一个迭代器,在Python中可以通过下面的方法判断一个对象是不是迭代器

from collections.abc import Iterator

li = [1,2,3,4]
it = iter(li)
print(isinstance(li,Iterator)) # li是可迭代对象,不是迭代器,这里返回false
print(isinstance(it,Iterator)) # it是迭代器,这里返回True

由于Python鸭子类型的特性,我们只要在一个类中实现__iter__()方法和__next__()方法,这个类就可以当做一个迭代器


from collections.abc import Iterator,Iterable

class Animal(object):

    def __iter__(self):
        return self

    def __next__(self):
        return self

an = Animal()
print(isinstance(an,Iterable)) # 结果为True
print(isinstance(an,Iterator)) # 结果为True


通过next()方法可以访问迭代器中的元素,每次返回一个元素,迭代器有多少个元素就需要执行next()多少次。如果执行多了就会报StopIteration异常。,

from collections.abc import Iterable,Iterator

li = [1,2,3]
it = iter(li)

print(next(it))
print(next(it))
print(next(it))
print(next(it)) 

结果

1
2
3
Traceback (most recent call last):
  File "C:/Users/Administrator/PycharmProjects/untitled/练习/Demo.py", line 8, in <module>
    print(next(it))
StopIteration
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值