zoukankan      html  css  js  c++  java
  • 生成器1

    生成器是一种特殊的迭代器。

    用生成器实现斐波那契数列:

    from collections import Iterator, Iterable
    
    
    def create_nums(num):
        a, b = 1, 1
        cnt = 0
    
        while cnt < num:
            yield a
            a, b = b, a + b
            cnt += 1
    
    
    nums_generator = create_nums(10)
    
    ret = iter(nums_generator)
    print(ret)  # <generator object create_nums at 0x00000000006ACD00>
    print(next(ret))  # 1
    print(isinstance(nums_generator, Iterable))  # True
    print(isinstance(nums_generator, Iterator))  # True
    
    for i in range(15):
        next(nums_generator)  # 抛出异常StopIteration

    可以看到对一个生成器调用iter方法,返回一个生成器对象ret(即可迭代对象),对ret调用next返回一个生成的值1,这两个步骤说明了生成器符合迭代器的特性(即对可迭代对象调用iter()返回一个迭代器,对迭代器调用next返回一个迭代出来的值)

    迭代器是一个类中实现了__iter__和__next__方法,生成器没有明显实现这两个方法,但是具有这两种方法的逻辑,所以说它既是迭代器,又有特殊性。

  • 相关阅读:
    UVa532 Dungeon Master 三维迷宫
    6.4.2 走迷宫
    UVA 439 Knight Moves
    UVa784 Maze Exploration
    UVa657 The die is cast
    UVa572 Oil Deposits DFS求连通块
    UVa10562 Undraw the Trees
    UVa839 Not so Mobile
    327
    UVa699 The Falling Leaves
  • 原文地址:https://www.cnblogs.com/olivertian/p/12603590.html
Copyright © 2011-2022 走看看