注意python的生成器一定是可以迭代的(iterable),但可以迭代不一定为生成器(iterator),比如,list,dict tuple,字符串都是可'迭代的' 但都不是生成器,
判断一个对象是否'可迭代' 可以使用isinstance()函数,需要collections模块的Iterable 对象
>>>from collections import Iterable
>>>isinstance([],Iterable)
>>>True
>>>isinstance(33,Iterable)
>>>Fasle
判断一个对象是否为迭代器,使用:
>>>isinstance([],Iterator)
>>>False
可见列表并不是迭代器,
>>>a=iter(range(10))
>>>isinstance[a,Iterator]
>>>True
使用Iter()函数的列表可以变成迭代器,或则自定义函数使用了yield
>>>def f1():
>>> yield 3
>>isinstance(f1,Iterator)
>>>False
>>isinstance(f1(),Iterator)
>>>True
关键字 yield 可以把函数变成迭代器,此时调用函数的时候,是普通函数调用有很大不同,
def f1():
yield 'n'
普通函数调用 f1 这里只是函数,f1()为一个生成器,里面命令还没有执行,需要next(f1())才可以。