pthon之可迭代对象、迭代器、生成器

可迭代对象

实现了__iter__方法的对象就叫做可迭代对象。__iter__方法的作用就是返回一个迭代器对象。直观理解就是能用for循环进行迭代的对象就是可迭代对象。比如:字符串,列表,元祖,字典,集合等等,都是可迭代对象。

•调用可迭代对象的__iter__方法返回一个迭代器对象(iterator)

•不断调用迭代器的__next__方法返回元素

•直到迭代完成后,处理StopIteration异常

 迭代器(iterator)

迭代器是一个带状态的对象,他能在你调用next()方法的时候返回下一个值,任何实现了__iter__和__next__()方法的对象都是迭代器,

•__iter__返回迭代器自身,

•__next__返回下一个值,如果没有更多元素了,则抛出StopIteration异常。

class MyIterator:
    def __init__(self,begin,end):
        self.begin=begin
        self.end=end
    def __iter__(self):
        return self
    def __next__(self):
        if self.begin==self.end:
            raise StopIteration('停止')
        x=self.begin
        self.begin+=1
        return x
# iter_obj=MyIterator(0,3)
# print(next(iter_obj))
# print(next(iter_obj))
# print(next(iter_obj))
# print(next(iter_obj))
for i in  MyIterator(0,3):
    print(i)

 运行结果:

生成器(generator)

生成器其实是一种特殊的迭代器,不过这种迭代器更加优雅。它不需要再像上面的类一样写__iter__()和__next__()方法了,只需要一个yiled关键字。 生成器一定是迭代器(反之不成立),因此任何生成器也是以一种懒加载的模式生成值。

def generator():#生成器
    yield 1
    yield 2
    yield 3

g=generator()
# print(g)
# print(next(g))
# print(next(g))
# print(next(g))
# print(next(g))
for i in g:
    print(i)

 运行结果:

 用生成器写打印输出0-4

def my_rang(start,end):
    i=start

    while i<end:
        yield i
        i=i+1
for e in my_rang(0,4):
    print(e)

运行结果;

 生成器表达式

生成器表达式是列表推倒式的生成器版本,看起来像列表推导式,但是它返回的是一个生成器对象而不是列表对象。

g=(e for e in (1,2,3,4,5,6))
# print(g)
for i in g:
    print(i)

 运行结果:

 判断是否可以迭代

from collections.abc import Iterable

print(isinstance([], Iterable))
print(isinstance({}, Iterable))
print(isinstance('abc', Iterable))
print(isinstance((x for x in range(10)), Iterable))
print(isinstance(100, Iterable))

 运行结果:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值