• 测开之路二十二:迭代器、生成器


    迭代器

    StopIteration:停止迭代

     

    class Cup(object):

    def __init__(self):
    ''' 初始化函数,索引和数据初始化。 '''
    self.index = 0
    self.good = [1, 3, 5, 6]

    def __iter__(self):
    ''' 这里固定返回对象自身self '''
    return self

    def __next__(self):
    '''
    这里每次返回一个元素,需要自己写个循环。
    最后当数据取完时一定要抛出StopIteration这个异常。
    '''
    # print(self.index)
    if self.index < len(self.good):
    data = self.good[self.index]
    self.index += 1
    return data
    else:
    raise StopIteration

    cup = Cup()
    for c in cup:
    print(c)

    迭代器实现斐波那契

    class Fibonacci(object):

    def __init__(self, n):
    self.n = n # 斐波那契有N项
    self.index = 0 # 迭代器遍历时的索引
    self.iterator = [0, 1] # 列表法生成斐波那契数列
    for i in range(2, self.n + 1):
    self.iterator.append(self.iterator[i - 1] + self.iterator[i - 2])
    def __iter__(self):
    ''' 这里固定返回对象自身self '''
    return self
    def __next__(self):
    if self.index <= self.n:
    data = self.iterator[self.index]
    self.index += 1
    return data
    else:
    raise StopIteration

    if __name__ == '__main__':
    fib = Fibonacci(5)
    for f in fib:
    print(f)

    生成器

    生成器表达式

    生成器函数,yield返回表达式对象,不计算值,在大量数据的时候,占用很少内存

    生成器实现斐波那契

    class Fibonacci(object):

    def __init__(self, n):
    self.n = n # 斐波那契有N项
    self.index = 0 # 迭代器遍历时的索引
    self.iterator = [0, 1] # 列表法生成斐波那契数列
    for i in range(2, self.n + 1):
    self.iterator.append(self.iterator[i - 1] + self.iterator[i - 2])

    def generator(self):
    for i in self.iterator:
    yield i

    if __name__ == '__main__':
    fib = Fibonacci(5)
    gen = fib.generator()
    for g in gen:
    print(g)
  • 相关阅读:
    linux 删除乱码文件
    snprintf用法
    面试时经常问到的非技术性问题
    vector查找元素
    new 和delete
    python安装
    UIPickerView详解
    设置文本框左边显示的View
    字符串的分割??
    VC++异常捕获??
  • 原文地址:https://www.cnblogs.com/zhongyehai/p/10809061.html
Copyright © 2020-2023  润新知