python cookbook 学习笔记 第四章
百无一用生
这个作者很懒,什么都没留下…
展开
-
python cookbook 学习笔记 第四章 迭代器和生成器(2) 代理迭代
代理迭代问题:构建了一个自定义容器对象,里面包含有列表,元组或其他可迭代对象。想直接在这个新容器上执行迭代操作。解决方案:实际上只需要定义一个__init__()方法,将迭代操作代理到容器内部的对象上去。比如:class Node(object): def __init__(self, value): self.value = value ...转载 2018-11-26 00:05:10 · 124 阅读 · 0 评论 -
python cookbook 学习笔记 第四章 迭代器和生成器(15) 顺序迭代合并后的排序迭代对象
顺序迭代合并后的排序迭代对象问题:有一系列排序序列,想将它们合并后得到一个排序序列并在上面迭代遍历。解决方案:heapq.merge()函数可以解决这个问题:import heapqa = [1, 4, 7, 10]b = [2, 5, 6, 11]for c in heapq.merge(a, b): print(c, end= " ") # 1 2 ...转载 2018-11-30 22:29:13 · 120 阅读 · 0 评论 -
python cookbook 学习笔记 第四章 迭代器和生成器(14) 展开嵌套的序列
展开嵌套的序列问题:将一个多层嵌套的序列展开成一个单层序列解决方案:可以写一个包含 yield from 语句的递归生成器来轻松解决这个问题。比如:from collections import Iterabledef flatten(items, ignore_types= (str, bytes)): for x in items: if...转载 2018-11-30 22:26:41 · 155 阅读 · 0 评论 -
python cookbook 学习笔记 第四章 迭代器和生成器(13) 创建数据处理管道
创建数据处理管道问题:想以数据管道(类似Unix管道,但是Unix管道又是什么鬼)的方式迭代处理数据。比如,有大量的数据需要处理,但是不 能将他们一次性放入内存中。解决方案:生成器函数是一个实现管道机制的好办法。假定要处理一个非常大的日志文件:"""foo/access-log-012007.gzaccess-log-022007.gzaccess-log-032...转载 2018-11-30 22:23:07 · 148 阅读 · 0 评论 -
python cookbook 学习笔记 第四章 迭代器和生成器(12) 不同集合上元素的迭代
不同集合上元素的迭代问题:想在多个对象上执行相同的操作,但是这些对象在不同的容器中,在不失代码可读性的前提下,避免写重复的代码。解决方案:itertools.chain() 方法可以简化这个任务。它接受一个(书上原文是一个,但是一个没什么意思。。)做为 输入,并返回一个迭代器,有效的屏蔽掉在多个容器中迭代细节。例子:from itertools import chain...转载 2018-11-30 22:18:25 · 101 阅读 · 0 评论 -
python cookbook 学习笔记 第四章 迭代器和生成器(11) 同时迭代多个序列
同时迭代多个序列问题:想同时迭代多个序列,每次分别从一个序列中取一个元素解决方案:为了同时迭代多个序列,可以使用zip()函数,比如:xpta = [1, 5, 4, 2, 10, 7]ypta = [101, 78, 37, 15, 62, 99]for x, y in zip(xpta, ypta): print(x, y)zip(a, b) 会生...转载 2018-11-30 22:15:10 · 126 阅读 · 0 评论 -
python cookbook 学习笔记 第四章 迭代器和生成器(10) 序列上索引值迭代
序列上索引值迭代问题:想在迭代一个序列的同时跟踪正在被处理的元素索引解决方案:内置的enumerate()函数可以很好的解决这个问题:my_list = ["a", "b","c"]for idx, val in enumerate(my_list, 1): print(idx, val)"""1 a2 b3 c"""为了按传统行号输出转载 2018-11-30 22:12:29 · 102 阅读 · 0 评论 -
python cookbook 学习笔记 第四章 迭代器和生成器(9) 排列组合的迭代
排列组合的迭代问题:想迭代遍历一个集合中元素的所有可能排列或组合解决方案:itertools 模块提供了三个函数来解决这个问题,其中一个是 itertools.permutations(),它接收一个集合,并 产生一个元组序列,每个元组由集合中所有元素的一个可能排列组成。也就是通过打乱集合中元素排列顺序生成一个元组。 比如:from itertools import pe...转载 2018-11-30 22:08:59 · 148 阅读 · 0 评论 -
python cookbook 学习笔记 第四章 迭代器和生成器(8) 跳过可迭代对象的开始部分
跳过可迭代对象的开始部分问题:想遍历一个可迭代对象,但是它开始的某些元素并不感兴趣,想跳过它们。解决方案:itertools 模块中有一些函数可以完成这个任务。itertools.dropwhile()函数接收一个函数对象和一个可迭代 对象,丢弃原有序列中直到函数返回 True 之前的所有元素(说的真绕。。。),然后返回后面所有的元素。假定读取一个开始部分是几行注释的文件:...转载 2018-11-30 22:04:43 · 214 阅读 · 0 评论 -
python cookbook 学习笔记 第四章 迭代器和生成器(7) 迭代器切片
迭代器切片问题:想得到一个有迭代器生成的切片对象,但标准切片操作不能做到解决方案:itertools.islice()使用于在迭代器和生成器上做切片操作。比如:def count(n): while True: yield n n += 1c = count(0)#print(c[10:20])# TypeError: 'g...转载 2018-11-30 22:00:59 · 118 阅读 · 0 评论 -
python cookbook 学习笔记 第四章 迭代器和生成器(6) 带有外部状态的生成器函数
带有外部状态的生成器函数问题:想定义一个生成器函数,但是他会调用某个你想暴露给用户使用的外部状态值解决方案:如果像让生成器暴露外部状态给用户,可以简单的将它实现为一个类,然后把生成器函数放到__iter__()方法中 去,比如:from collections import dequeclass Linehistory(object): def __init_...转载 2018-11-30 21:57:31 · 133 阅读 · 0 评论 -
python cookbook 学习笔记 第四章 迭代器和生成器(5) 反向迭代
反向迭代问题:反向迭代一个序列解决方案:使用内置的 reversed() 函数,比如:a = [1, 2, 3, 4]for x in reversed(a): print(x)反向迭代仅仅当对象的大小可预先确定或者对象实现了__reversed__() 的特殊方法才能生效。如果两者都不符合, 必须先将一个对象转换为一个列表才行,比如:f = open...转载 2018-11-30 20:48:46 · 135 阅读 · 0 评论 -
python cookbook 学习笔记 第四章 迭代器和生成器(4) 实现迭代器协议
实现迭代器协议问题:想构建一个能支持迭代操作的自定义对象,并希望找到一个能实现迭代协议的简单方法。解决方案:在一个对象上实现迭代,最简单的方式是使用一个生成器函数。在第(2)节中,使用 Node 类来表示树形数据结构。如果想实现一个深度优先方式遍历树形节点的生成器。(这种深度方式遍历在本例中依靠了 depth_first() 函数来 实现)下面是代码示例:class N...转载 2018-11-30 20:45:13 · 98 阅读 · 0 评论 -
python cookbook 学习笔记 第四章 迭代器和生成器(3) 使用生成器创建新的迭代模式
使用生成器创建新的迭代模式问题:实现一个自定义的迭代模式,跟普通的内置函数,如 range() reversed() 不一样。解决方案:下面是一个产生某个范围内浮点数的生成器:def frange(start, stop, increment): x = start while x < stop: yield x x ...转载 2018-11-30 20:40:19 · 123 阅读 · 0 评论 -
python cookbook 学习笔记 第四章 迭代器和生成器(1) 手动遍历迭代器
手动遍历迭代器问题:想遍历一个对象中所有元素,但是却不想使用 for 循环解决方案:为了手动遍历迭代对象,使用 next() 函数并在代码中捕获 StopIteration 异常。比如:下面一个例子读取 一个文件中的所有行:def manual_iter(): with open("password.txt") as f: try: ...转载 2018-11-25 00:51:22 · 106 阅读 · 0 评论 -
python cookbook 学习笔记 第四章 迭代器和生成器(16) 迭代器代替while 无限循环
迭代器代替 while 无限循环问题:在代码中使用 while 循环来迭代处理数据,因为它需要某个函数或者一般迭代模式中不同的测试条件。能不能用迭代 器来重写这个循环呢?解决方案:一个常见的 IO 操作程序可能会像下面这样:CHUNKSIZE = 8192def reader(s): while True: data = s.recv(CHUN...转载 2018-11-30 22:32:14 · 217 阅读 · 0 评论