可迭代对象,迭代器,生成器

1、Iterable:可迭代对象

可以直接作用于for循环的对象,叫做可迭代对象(Iterable)

注:

       可直接作用于for循环的对象:

                                            1、基本数据类型:list、set、dict、tuple、string

                                            2、generator生成器:带有yield关键字的生成器函数

判断一个对象是否为可迭代对象:   

from collctions import Iterable

isinstancce(obj, Iterable)          # obj为可迭代对象返回True,否则返回False

注:

       x for x in range(n) --> 生成一个新的列表,列表的数量及值由range决定

       x for x in range(5) ==> [0, 1, 2, 3, 4]

2、Iterator:迭代器

迭代器:Iterator 不仅可以直接作用于for循环,也可以使用next()函数不断调用并获取下一个元素,直 到取出最后一

              个元素,当获取最后一个元素的下一个元素时,会返回一个StopIteration 的错误

注:       可以使用next()函数调用并获取下一个元素的对象称为迭代器对象

判断一个对象是否为迭代器对象 :

from collctions import Iterator

isinstance(obj, Iterator)           # obj是可迭代对象返回True,否则返回False

*next(obj) --> obj为迭代器对象,返回迭代器中的一个元素,当使用next,光标会向后移动,当光标无法再往后移动时,

 调用next会报错

注:可迭代对象不一定是迭代器对象,但迭代器对象一定是可迭代对象

将list、set、dict、tuple、str转为Iterator对象:

                                                                       语法格式:iter(obj)

3、generator:生成器

generator生成器:使用yield关键字的函数被称为生成器函数

使用yield的函数与使用普通函数的区别:

                                                              1、使用yield的函数返回一个生成器对象

                                                               2、普通函数的返回值属于程序员自己设置

yield:将一个函数拆分成多个模块,模块与模块之间为连续的 yield可以间接控制进程或线程

生成器可以认为是一个迭代器,使用方式与迭代器一致

例:

    def func():                                                              def func():

        print(1)                                                                   yield 100

        print(2)                                                                   yield 200

        print(3)                                                                   yield 300

    print(type(func()))                                                  print(type(func())) 

  返回的是NoneType类型                                          返回的是generator类型,若用next打印,会依次打印出yield的数据

猜你喜欢

转载自blog.csdn.net/pyrans/article/details/81487340