博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python高级编程 读书笔记: 7、 第3章_迭代对象与迭代器
阅读量:3662 次
发布时间:2019-05-21

本文共 2040 字,大约阅读时间需要 6 分钟。

# -*- encoding: utf-8 -*-import itertools'''7、 第3章_迭代对象与迭代器关键:1 迭代器生成器含义: 是一个函数,按照顺序返回值,执行直到被通知输出一个值,然后继续执行直到再次被通知输出值迭代器含义:包含__next__方法的任何对象可迭代对象含义: 任何定义了__iter__方法的对象。__iter__返回迭代器(实现了__next__方法)特点: 生成器可以是迭代器,但不一定是迭代对象2 标准库中的生成器2.1 rangerange对象的迭代器是一个生成器,返回序列值2.2 dict.items及其家族iterkeys, itervalues和iteritems都是迭代器,是生成器的迭代对象2.3 zip一次可迭代多个可迭代对象同一个索引上的元素,并返回这些可迭代对象的元素组成的元组2.4 mapmap接受函数和多个可迭代对象map(function, iter1, iter2, ...)2.5 文件对象文件对西那个有一个页数方法readline,每次可读取一行数据3 何时编写生成器原则: 只有当需要值时才会确定这个值3.1 分块访问数据没有必要存储整个数据副本应用场景: 打算迭代大量数据的情况3.2 分块计算数据仅仅在需要的时候才计算数据,例如fibonacci序列可能是无穷的4 何时使用生成器单力模式很多生成器是单例模式的。有些迭代对象可以有多个迭代器,有些迭代对象则不可以。5 生成器内部的生成器python 3中引入了yield from,作用: 为生成器提供调用其他生成器的直接方式样例:def visitGeneratorWithPython3():    yield from generator1()    yield from generator2()分析:上述被称为生成器委托,任何发送给封装生成器的值都会被发送给当前的委托生成器参考:Python高级编程'''def useMap():    generator = map(lambda x,y: max(x, y), [4, 1, 7], [3, 4, 5])    for value in generator:        print valueclass Fibonacci(object):    def __init__(self):        self.numbers = []    '''    实现了__iter__方法的都是可迭代对象,返回迭代器(实现__next__方法)    '''    def __iter__(self):        return self    def __next__(self):        if len(self.numbers) < 2:            self.numbers.append(1)        else:            self.numbers.append(sum(self.numbers))            self.numbers.pop(0)        return self.numbers[-1]    def send(self, value):        pass    '''    为兼容python2    '''    next = __next__def useIterator():    fib = Fibonacci()    iter1 = iter(fib)    print next(iter1)    print next(iter1)    print next(iter1)    print next(iter1)    print next(iter1)    iter2 = iter(fib)    print next(iter2)def generator1():    yield 'a'    yield 'b'def generator2():    yield 'c'    yield 'd'def visitGenerator():    for data in itertools.chain(generator1(), generator2()):        yield data# def visitGeneratorWithPython3():#     yield from generator1()#     yield from generator2()def process():    useMap()    useIterator()    for value in visitGenerator():        print valueif __name__ == "__main__":    process()

 

转载地址:http://ivlfn.baihongyu.com/

你可能感兴趣的文章
JS遍历DOM树
查看>>
JavaScript高级学习(五)——正则表达式
查看>>
验证密码的强中弱程度——正则表达式
查看>>
验证表单——正则表达式
查看>>
Centos7下spinnaker安装至k8s
查看>>
linux常用命令
查看>>
设计模式
查看>>
一个汉字到底占几个字节
查看>>
项目支持多数据库
查看>>
nginx部署
查看>>
Spring Cloud Alibaba——转载自楠哥
查看>>
Springboot + slf4j日志
查看>>
信息安全
查看>>
Linux部署后问题排查
查看>>
项目打包问题
查看>>
Nacos
查看>>
Gateway网关
查看>>
Spring注解
查看>>
Validate注解校验
查看>>
01 Laravel-框架核心要点
查看>>