资讯专栏INFORMATION COLUMN

Python生成器和迭代器学习笔记

zzzmh / 1083人阅读

摘要:定义生成器一种定义体中含有关键词的函数被调用时得到的对象有时指上述的函数迭代器一种实现了无参数方法和方法的对象实例内建的一种类,其继承自可迭代对象实现了或方法的对象范例没有方法注意迭代器是可迭代对象生成器也是迭代器不要把和搞混,后者虽然可以

定义 生成器 (generator)

一种定义体中含有yield关键词的函数被调用时得到的对象

有时指上述的函数

迭代器 (iterator)

一种实现了无参数__next__方法和__iter__方法的对象(实例)

python内建的一种类,其继承自collections.Iterable (py3.4)

可迭代对象

实现了__iter__或__getitem__方法的对象

范例
class GeneratorSampleInClass:
    def __iter__(self):
        for item in [1, 2, 3]:
            yield item


g = GeneratorSampleInClass()
print(type(GeneratorSampleInClass.__iter__))  # 
print(type(g.__iter__()))  # 
print(dir(g.__iter__()))  # [..., "__next__", ...]


def generator_sample_in_function():
    for item in [1, 2, 3]:
        yield item


print(type(generator_sample_in_function))  # 
print(type(generator_sample_in_function()))  # 
print(dir(generator_sample_in_function))  # 没有__next__方法
print(dir(generator_sample_in_function()))  # [..., "__next__", ...]


class IteratorSampleInClass:
    def __iter__(self):
        return self

    def __next__(self):
        for item in [1, 2, 3]:
            yield item


from collections import Iterator

i = IteratorSampleInClass()
print(isinstance(i, Iterator))  # True
注意

迭代器是可迭代对象

生成器也是迭代器

不要把yield和yield from搞混,后者虽然可以简化for循环中的yield语句,但其的定义较复杂,我也不是很明白,这里就不做展开

作用

更优雅的代码

更有效处理大型对象 (不用一次性读入所有数据)

其他 (例:生成器还可以通过.send()方法变身为协程)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41041.html

相关文章

  • Python 3 学习笔记之——基础语法

    摘要:迭代器和生成器字符串,列表或元组对象都可用于创建迭代器。创建自己的迭代器,需要在类中实现实现两个方法与。方法返回一个特殊的迭代器对象,这个迭代器对象实现了方法并通过异常标识迭代的完成。要反向遍历一个序列,首先指定这个序列,然后调用函数。 1. a, b = a, a + b 先计算右边表达式,然后再同时赋值给左边。 2. 条件控制和循环语句 条件控制 if condition_1: ...

    scola666 评论0 收藏0
  • Python入门学习笔记汇总

    摘要:导语本文章汇总了本人在学习基础之绪论篇数据结构篇函数篇面向对象篇控制流程篇和元编程篇学习笔记的链接,打算入门的朋友们可以按需查看并交流。 导语:本文章汇总了本人在学习Python基础之绪论篇、数据结构篇、函数篇、面向对象篇、控制流程篇和元编程篇学习笔记的链接,打算入门Python的朋友们可以按需查看并交流。 第一部分:绪论篇 1、Python数据模型 第二部分:数据结构篇 2、序列构成...

    U2FsdGVkX1x 评论0 收藏0
  • Python 进阶之路 (九) 再立Flag, 社区最全的itertools深度解析(上)

    摘要:例如,以下对两个的相应元素求和这个例子很好的解释了如何构建中所谓的迭代器代数的函数的含义。为简单起见,假设输入的长度可被整除。接受两个参数一个可迭代的正整数最终会在中个元素的所有组合的元组上产生一个迭代器。 前言 大家好,今天想和大家分享一下我的itertools学习体验及心得,itertools是一个Python的自带库,内含多种非常实用的方法,我简单学习了一下,发现可以大大提升工作...

    tuantuan 评论0 收藏0
  • 流畅的python读书笔记-第十四章-可迭代的对象、迭代生成

    摘要:可迭代的对象迭代器和生成器理念迭代是数据处理的基石。可迭代的对象与迭代器的对比从可迭代的对象中获取迭代器标准的迭代器接口有两个方法。此外,也没有办法还原迭代器。最终,函数的定义体返回时,外层的生成器对象会抛出异常这一点与迭代器协议一致。 可迭代的对象、迭代器和生成器 理念 迭代是数据处理的基石。扫描内存中放不下的数据集时,我们要找到一种惰性获取数据项的方式,即按需一次获取一个数据项。这...

    kohoh_ 评论0 收藏0
  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0

发表评论

0条评论

zzzmh

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<