【Python】Yield and Iter

2019-12-11  本文已影响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)
上一篇 下一篇

猜你喜欢

热点阅读