python学习之---迭代器与生成器

什么是迭代器

  • 可迭代对象:
    可以通过for循环来实现遍历,例如list、string、dict
  • 迭代器:
    不仅可以使用for循环,还可以使用next()方法、__iter__()
    • next():获取容器中的下一个元素,当容器中没有可访问的元素后,next()方法将会抛出一个StopIteration异常终止迭代器
    • iter():
      内建函数获取迭代器对象

如何判断是迭代器

使用isinstance()函数来判断一个对象是否是一个已知的类型

from collections import Iterable, Iterator
# isinstance(对象, Iterable) 是否是可迭代的
# isinstance(对象, Iterator) 是否是迭代器
mylist = [1, 2, 3]
print(isinstance(mylist, Iterable))
print(isinstance(mylist, Iterator))

什么是生成器

  • 特殊的迭代器,通过函数来创建
  • 使用yeild来一次返回一个结果,而不是return
    • 生成器在执行到yeild语句时,会暂停生成器函数执行,并在下次执行时继续从上次暂停的位置开始

如何判断是否是生成器

同上通过isinstance()函数

斐波那契数列的各种实现方法

for循环实现法

n = int(input())
if n < 2:
   print(n)
else:
  dp = [-1] * (n + 1)
  dp[0] = 0
  dp[1] = 1
  for i in range(2, n + 1):
      dp[i] = dp[i - 1] + dp[i - 2]
  print(dp[n])

递归实现法

def fib(n):
    if n < 2:
        return n
    else:
        return fib(n - 1) + fib(n -2)
s = int(input())
print(fib(s))

迭代器实现法

class FibonacciIterator:
    def __init__(self):
        self.first = 1
        self.second = 1

    def method(self):
        pass

    def __iter__(self):
        return self

    def __next__(self):
        result = self.first + self.second
        self.first = self.second
        self.second = result
        return self.first


if __name__ == '__main__':
    fibo = FibonacciIterator()
    for i in range(int(input()) - 1):
        print(next(fibo))
posted @ 2024-07-18 16:51  勤奋的飘朵儿  阅读(5)  评论(0编辑  收藏  举报