黑马程序员技术交流社区

标题: python中的迭代器和生成器的 快速记忆 [打印本页]

作者: 皮卡丘的小主人    时间: 2018-6-24 10:27
标题: python中的迭代器和生成器的 快速记忆

这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。
可以使用isinstance()判断一个对象是否是Iterable对象:
>>> from collections import Iterable
>>> isinstance([], Iterable)
True
>>> isinstance({}, Iterable)
True
>>> isinstance('abc', Iterable)
True
>>> isinstance((x for x in
ge(10)), Iterable)
True
>>> isinstance(100, Iterable)
False

如果给定一个 list 或 tuple ,我们可以通过for循环来遍历这个 list 或 tuple ,这种遍历我们称为迭代( Iteration )

在 Python 中,这种一边循环一边计算的机制,称为生成器: generator
斐波拉契数列
def fib(max):
n, a, b = 0, 0, 1
while n < max:
print(b)
a, b = b, a + b
n = n + 1-;/[[/
return 'done'

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
可以使用isinstance()判断一个对象是否是Iterator对象:

>>> from collections import Iterator
>>> isinstance((x for x in range(10)), Iterator)
True
>>> isinstance([], Iterator)
False
>>> isinstance({}, Iterator)
False
>>> isinstance('abc', Iterator)
False

生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。
把list、dict、str等Iterable变成Iterator可以使用iter()函数:

小结
凡是可作用于for循环的对象都是Iterable类型;
凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
作者: cai901022    时间: 2018-6-26 08:46
学习到了,感谢楼主




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2