美文网首页
【Python】Yield and Iter

【Python】Yield and Iter

作者: 乞力马扎罗的雪人 | 来源:发表于2019-12-11 13:04 被阅读0次

    yield and iter

    yield生成器,减少代码行数和内存占用,不用生成整个list。返回generator对象。直接next()会在访问不到下标时放弃,一种访问generator的方法

        while True:
        try:
            print(g.__next__())
        except StopIteration:
            break
    

    iter 迭代器,内建于for循环中,iter()函数返回一个迭代器对象,接受的参数是一个实现了__iter__()方法的容器或迭代器(精确来说,还支持仅有__getitem__()方法的容器),它仅可以在迭代至当前元素时才计算(或读取)该元素的值,在此之前可以不存在,在此之后可以销毁,所以非常适合遍历无穷个元素的集合(如斐波那契数列)或巨大的事物(如文件)。

    alist=range(2)
    it=iter(alist)
    it.next()
    >>>1
    
    
    class Fib(object):
        def __init__(self):
            self._a = 0
            self._b = 1
        def __iter__(self):
            return self
        def next(self):
            self._a, self._b = self._b, self._a + self._b
            return self._a
    for i, f in enumerate(Fib()):
        print f
       if i > 10:
           break
    # 仅仅使用两个变量 
    

    迭代器还有itertools等工具

    def itergroups(items, group_size):
        # 输出将item可迭代元组序列
        assert group_size >= 1# 确保group大于1
        group = []
        for x in items:
            group.append(x)
            if len(group) == group_size:
                yield tuple(group)
                del group[:]
        if group:
            yield tuple(group)
    

    相关文章

      网友评论

          本文标题:【Python】Yield and Iter

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