美文网首页
【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