十一 —— 迭代器、生成器、装饰器

迭代器(Iterable)

迭代:

  通过for循环遍历对象的每一个元素的过程。

  python中,string/list/dict/tuple/set/bytes都是可以迭代的数据类型。通过collections模块中的Iterable类型来判断一个对象是否可迭代。

 迭代器:

  迭代器是一种可以被遍历的对象,并且能作用于next()函数。迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束。迭代器只能往后遍历,不能回溯,不像列表可随时取后面或前面的数据。迭代器通常要实现两个基本的方法:iter()和next()。

  string/list/dict/tuple/set/bytes,或自定义对象都可用于创建迭代器(使用内置iter创建迭代器,用next获取迭代器的下一个元素。当后面无元素时,弹出错误):

 

   python迭代器可以被next()函数调用并不断返回下一个元素,直到没有元素时抛出错误。迭代器不能提前知道提前知道序列长度,只能不断通过next()函数得到下一个元素,所以迭代器可以节省内存和空间。

迭代器(Iterator)和可迭代(Iterable)的区别:::

  1、凡是可作用于for循环的对象都是可迭代类型

  2、凡是可作用于next()函数的对象都是迭代器

  3、list、dict、str等是可迭代的但不是迭代器,因为next()函数无法调用他们。可通过iter()函数将他们转换为迭代器

  4、python的for循环本质上及时通过不断调用next()函数实现的

生成器(Generator)

  因为序列或集合内的元素个数巨大,肯定不能全部制造出来放入内存。python中,元素按照某种算法推算出来,在循环的过程中不断推算出后续的元素,不用再创建完整的元素集合,节省内存空间。python中,这种边循环边计算出元素的机制,叫生成器。

 

  python中,使用yield返回的函数会变成一个生成器。在调用生成器的过程中,每次遇到yield时,函数会停止并保存当前所有的运行信息,返回yield的值。并在下一次执行next()方法时,从当前位置继续运行。

装饰器(Decorator)

  装饰器就是装饰对象的器件。可以在不改变原有代码的情况下,为被装饰的对象增加新的功能/附加限制条件或者帮助输出。

 参考 —— https://www.cnblogs.com/cicaday/p/python-decorator.html

猜你喜欢

转载自www.cnblogs.com/KeenaCherry/p/12000291.html