python的生成器

注意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())才可以。










请先 登录 后评论
  • 0 关注
  • 0 收藏,92 浏览
  • 石天 提出于 2016-11-28 22:04

相似问题