2-1迭代对象、迭代器、生成器

作者: cuzz_ | 来源:发表于2018-03-01 17:59 被阅读13次

可迭代对象、迭代器和生成器的关系

image.png

可迭代对象

可迭代对象实现某种接口,对与列表内部实现了__iter__()方法,而对于字符串内部并没有__iter__()方法,而有__getitem__()也就是说当我们使用iter(x)迭代一个对象时,先回调用本身的__iter__()方法,如果没有__iter__(),有__getitem__()方法也可以

反向迭代

实现了__reversed__()方法

迭代器

必须满足迭代对象的条件,而且实现了__next__()

class FloatRange(object):
    def __init__(self, start, end, step=0.1):
        self.start = start
        self.end = end
        self.step = step
        self.flag = start - step

    def __iter__(self):
        t = self.start
        while t <= self.end:
            yield t
            t += self.step

    def __reversed__(self):
        t = self.end
        while t >= self.start:
            yield t
            t -= self.step

    def __next__(self):
        self.flag += self.step
        if self.flag > self.end:
            raise StopIteration
        return self.flag

# 正向迭代
for x in FloatRange(1.0, 2.0, 0.2):
    print(x)

# 反向迭代
for x in reversed(FloatRange(1.0, 2.0, 0.2)):
    print(x)

# 迭代器
r = FloatRange(0.0, 5.0, 0.5)
print(next(r))
print(next(r))

生成器

Python使用生成器对延迟操作提供了支持。所谓延迟操作,是指在需要的时候才产生结果,而不是立即产生结果。这也是生成器的主要好处。

python有两种不同的方式提供生成器:

生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行

def fibonacci(n): 
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n): 
            return
        yield a
        a, b = b, a + b
        counter += 1
f = fibonacci(10) 

生成器表达式:实现了迭代器接口,类似于列表推导,将列表推导中的中括号替换成圆括号,生成器返回的结果一个对象,而不是一次构建完整的列表

squares = (x**2 for x in range(10)) 

相关文章

  • Python基础-16生成器-迭代器

    16.生成器-迭代器     可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象,在Python中提供...

  • yield and Iterator

    Generator(生成器) 生成器是特殊的迭代器,迭代器不一定是生成器。 生成器与迭代器均是可迭代对象。 目前学...

  • 迭代器

    可迭代对象(Iterable): for迭代器(Iterator): for + next生成器属于迭代器。 验...

  • Python可迭代对象,迭代器,生成器关系

    列表,元组,字符串,迭代器,生成器都是可迭代对象。所以,可迭代对象不一定是迭代器,生成器。 将一个可迭代对象传递给...

  • 可迭代对象、迭代器、生成器

    可迭代对象 --> 迭代器 --> 生成器; 可迭代对象:实现了__iter__()方法的对象,该方法返回迭代对象...

  • 理解迭代器/生成器

    完全理解Python 迭代对象、迭代器、生成器 迭代和生成操作总结 Python迭代器 http://www.ji...

  • 迭代器和生成器

    迭代器和生成器 迭代器 hasattr(list,'iter')True 判断列表是否为可迭代对象 lst = [...

  • 迭代机制

    可迭代对象、迭代器、生成器、生成式区别 a. 可迭代对象: 一个对象能够被迭代的使用,这个对象就是可迭代对象 b....

  • Python迭代器和生成器

    所有的生成器都是迭代器;从可迭代的对象中获取迭代器 一、序列可迭代的原因:iter函数 迭代对象x时,自动调用it...

  • 【2017-09-20】迭代器与生成器(一)

    迭代器(iterator)与生成器(generator) 迭代器迭代器:它是一个带状态的对象,调用next()方法...

网友评论

    本文标题:2-1迭代对象、迭代器、生成器

    本文链接:https://www.haomeiwen.com/subject/swfnxftx.html