python学习之---迭代器与生成器
什么是迭代器
- 可迭代对象:
可以通过for循环来实现遍历,例如list、string、dict
- 迭代器:
不仅可以使用for循环,还可以使用next()方法、__iter__()
- next():
获取容器中的下一个元素,当容器中没有可访问的元素后,next()方法将会抛出一个StopIteration异常终止迭代器
- iter():
内建函数获取迭代器对象
- next():
如何判断是迭代器
使用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))
要一直努力这是做重要的