zoukankan      html  css  js  c++  java
  • 【摘】人生苦短,每日python

    python和它的迭代器

    有代码如下:

    class CountDown(object):
    
        def __init__(self, step):
    
            self.step = step
    
        def __next__(self):
    
            if self.step <= 0:
                raise StopIteration
            self.step -= 1
            return self.step
    
        def __iter__(self):
    
            return self
    
    if __name__ == '__main__':
    
        for e in CountDown(4):
            print(e)
    

    当调用for时,
    先调用了CountDown的 iter(),
    每一次循环则调用了CountDown的 next()

    这个过程就像下面一样

    >>> i = iter('43210')
    >>> next(i)
    '4'
    >>> next(i)
    '3'
    >>> next(i)
    '2'
    >>> next(i)
    '1'
    >>> next(i)
    '0'
    >>> next(i)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    StopIteration
    

    python和它的生成器

    如果要实现斐波那契数列,该如何实现呢?

    不用生成器的话,会写下面的代码

    def fibonacci(i):
    
        if i == 1 or i == 2:
            return 1
        elif i > 2:
            return fibonacci(i-1) + fibonacci(i-2)
        else:
            raise Exception('非法参数')
    
    
    if __name__ == '__main__':
    
        print(fibonacci(1))
        print(fibonacci(2))
        print(fibonacci(3))
        for i in range(10):
            print(fibonacci(4+i))
    

    使用生成器的话,会写下面的代码

    def fibonacci():
        
        a, b = 0, 1
        while True:
            yield b
            a, b = b, a + b
    
    if __name__ == '__main__':
        
        fib = fibonacci()
        print(next(fib))
        print(next(fib))
        print(next(fib))
        for _ in range(10):
            print(next(fib))
    

    其结果都是

    1
    1
    2
    3
    5
    8
    13
    21
    34
    55
    89
    144
    233
    

    基于yield语句,生成器可以暂停函数并返回一个中间结果。该函数会保存执行上下文,稍后在必要时可以恢复。
    其中fib,是generator对象,一个特殊的迭代器。

    摘自 《Python高级编程》

  • 相关阅读:
    Delphi公用函数单元
    Delphi XE5 for Android (十一)
    Delphi XE5 for Android (十)
    Delphi XE5 for Android (九)
    Delphi XE5 for Android (八)
    Delphi XE5 for Android (七)
    Delphi XE5 for Android (五)
    Delphi XE5 for Android (四)
    Delphi XE5 for Android (三)
    Delphi XE5 for Android (二)
  • 原文地址:https://www.cnblogs.com/featherw/p/10305442.html
Copyright © 2011-2022 走看看