美文网首页
Fluent Python笔记--iter方法

Fluent Python笔记--iter方法

作者: MontyOak | 来源:发表于2018-04-06 20:55 被阅读21次

    yield from

    如果一个生成器要从另一个生成器产出值,一般的做法是for语句嵌套:

    >>> def chain(*iterables):
    ...     for it in iterables:
    ...         for i in it:
    ...             yield i
    ...
    >>> s = 'ABC'
    >>> t = tuple(range(3))
    >>> list(chain(s, t))
    ['A', 'B', 'C', 0, 1, 2]
    

    为了简化写法,PEP380引入了yield from句法:

    >>> def chain(*iterables):
    ...     for i in iterables:
    ...         yield from i
    ...
    >>> list(chain(s, t))
    ['A', 'B', 'C', 0, 1, 2]
    

    除了代替嵌套循环之外,yield from创建了通道,将内层生成器与外层生成器客户端联系起来。这对于生成器类的协程尤为重要。

    iter方法

    对于可迭代对象使用iter方法可以返回一个迭代器,但是iter方法还有第二个参数:

    >>> def d6():
    ...     return randint(1, 6)
    ...
    >>> d6_iter = iter(d6, 1) # 当返回值为1时抛出StopIteration,所以1是不会被打印出来的
    >>> d6_iter
    <callable_iterator object at 0x00000000029BE6A0>
    >>> for roll in d6_iter:
    ...     print(roll)
    ...
    4
    3
    6
    3
    

    生成器型协程

    总所周知,yield用于实现生成器。随后引入了send方法。send方法不仅可以把生成器推进到下一步(类似next方法),还实现了生成器客户端发送数据,允许客户代码和生成器之间数据交互。

    相关文章

      网友评论

          本文标题:Fluent Python笔记--iter方法

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