标签:函数调用 生成 generator 但我 list rom 类型 ons 为什么
生成器:generator
迭代器:Iterator
可迭代对象:Iterable
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
Iterator对象表示的是一个数据流
满足两个条件:1.有iter方法
2.可以使用next方法
list
tuple
dict
string
generator(两种方式)
这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。
>>> from collections import Iterable
>>> isinstance([], Iterable)
True
>>> isinstance({}, Iterable)
True
>>> isinstance(‘abc‘, Iterable)
True
>>> isinstance((x for x in range(10)), Iterable)
True
>>> isinstance(100, Iterable)
False
>>> 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等数据类型不是Iterator?
这是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。
Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。
1.调用可迭代休想的iter方法,返回一个迭代器对象
2.调用迭代器的next方法
3.处理stopinteration异常
标签:函数调用 生成 generator 但我 list rom 类型 ons 为什么
原文地址:http://www.cnblogs.com/xiaoyaz/p/7620568.html