python cook 2
迭代器 iterator 生成器 generator
1、手动遍历迭代器
2、代理迭代
解释:将迭代操作代理到容器内部的对象上
操作:使用__iter()__, for 循环遍历对象时,会自动调用类特殊成员方法__iter()__
class Foo(object):
def __init__(self, sq):
self.sq = sq
def __iter__(self):
return iter(self.sq)
obj = Foo([11,22,33,44])
for i in obj:
print i
自定义可迭代的类
3、使用生成器创建新的迭代模式
生成器也是一种可迭代的对象
函数内使用了yeild ,则该函数就变成了一个生成器
生成器只能用于迭代操作 ,如 next()
for 循环 是一种迭代操作,其内部调用了next()
for循环语法内部做了什么?
obj = iter([11,22,33,44]) while True:
val = obj.next()
print val
for 循环语法内部
4、实现迭代器协议
略
5、反向迭代
列表或字典等可以使用reversed()进行反向迭代;
自定义对象内部实现了__reversed__()__的特殊方法时,可以使用reversed(obj),反向迭代生效。
6、带有外部状态的生成器函数
自定义一个类,把生成器函数放到__iter__()方法中,例如
from collections import deque
class linehistory:
def __init__(self, lines, histlen=3):
self.lines = lines
self.history = deque(maxlen=histlen)
def __iter__(self):
for lineno, line in enumerate(self.lines, 1):
self.history.append((lineno, line))
yield line
def clear(self):
self.history.clear()
生成器类
7、迭代器切片
使用 itertools.islice(iterator,start,end) 来对迭代器和生成器切片,返回一个可迭代的 islice 对象,同时 原来的迭代器会被消耗
如果需要之后再次访问这个迭代器,记得先把它里面的数据放入一个列表中
def count(n):
while True:
yield n
n += 1
c = count(0) imort itertools
for i in itertools(c,0,3)
print(i)
>0
>1
>2
生成器切片
8、跳过可迭代对象的开始部分
itertools.dropwhile(func,itertor) 每次迭代的值会传入func,当func返回值为True时,丢弃该值,直到func返回值为false时,停止判断返回后面所有的值
a.txt 前三行为注释
#
#
#
aaaaaaaa
bbbbbbbb
去掉注释
import itertools
with open('a.txt') as f:
for i in itertools.dropwhile(lambda line:line.startswith('#'),f):
print(i) >>aaaaaaaa >>bbbbbbbb
使用dropwhile
9、排列组合的迭代
10、序列上索引值迭代
11、同时迭代多个序列
12、不同集合上元素的迭代
13、创建数据处理管道
14、展开嵌套的序列
判断元素可迭代后,递归yield生成器
from collections import Iterable
def flatten(items,ignore_type=(str,bytes)): for i in items: if isinstance(i,Iterable) and not isinstance(i,ignore_type): yield from flatten(i) else: yield i a=[1,2,[3,4,[5,6],7,8],9] for i in flatten(a):
print(i)
yield from
15、顺序迭代合并后的排序迭代对象
16、迭代器代替while无限循环
python cook 2的更多相关文章
- Python Cook函数笔记 【第一章】
2017年4月28日 19:29:52 解压赋值给多个变量 可迭代的对象(list,tuple,string,文件对象,迭代器,生成器等),都可以进行解压赋值给多个对象. #!/usr/bin/env ...
- python cook 整理
1.字符串分割 单个分隔符 'abc'.split('b') >> ['a','c'] 多个分隔符 re.split(r'[b,d]','abcde') >>&g ...
- Python强大的格式化format
原文地址:http://www.jb51.net/article/63672.htm 自python2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足.那么,他跟之前的%型 ...
- Python零散函数
1. python json.dumps() json.dump()的区别 注意cat ,是直接输出文件的内容 load和loads都是实现"反序列化",区别在于(以Python为 ...
- python相关资料链接
后续的博客更新,会涉及到很多的python及python的框架相关的内容,这里将自己收藏的一些关于python相关资料的链接做一个整理,算是一个导航索引吧... PS:其中有些链接对应的技术团队文章, ...
- python代码执行bash命令 -- python3 cook book
python代码执行bash命令相关 -- python3 cook book refer: https://python3-cookbook.readthedocs.io/zh_CN/latest/ ...
- python征程3.1(列表,迭代,函数,dic,set,的简单应用)
1.列表的切片. 1.对list进行切片.'''name=["wangshuai","wangchuan","wangjingliang", ...
- python Django session/cookie
一, Cookie #cookie # def cook1(request): # print(request.COOKIES) # 查看cooke # # print(request.get_sig ...
- Python标准库14 数据库 (sqlite3)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.S ...
随机推荐
- 题说proxy
昨天在和群友讨论时遇到一题是这样的. 题目描述 //Tomy非常敏感,不喜欢别人碰他的东西.一旦有人碰他就会大喊Don't Touch Me. //完成tomy这个对象,禁止对tomy的内容进行修改( ...
- QML手动连接信号槽【Connections】
1.使用Connections import QtQuick 2.6 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 Window { vi ...
- Python3 tkinter基础 Listbox height 显示行数的上限
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3 tkinter基础 Listbox Button 点击按钮删除选中的单个元素
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Docker 使用Dockerfile构建tomcat镜像
Dockerfile概念: 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么之前提及的无法重复的问题. ...
- 为静态博客生成器WDTP移植了一款美美哒主题
前言 关于这个主题的移植后公布,我已经联系了主题作者并取得同意,这个主题是一夜涕所写的Sgreen,预览图见下 关于WDTP 就是一个很方便很便携很快速的cpp编写的带gui跨平台的开源的静态博客生成 ...
- vue项目从引入vue.js 改为使用vue-cil (webpack)时修改的一些内容
在元素属性中不要写js关键字,会报使用关键字的错如@click='if(){}else{}', if-else 语句可以使用三元表达式或短路运算符来实现 v-for 不写:key 会有警告 ,使用: ...
- (转载)C#工具箱Menustrip控件中分割线的设置方法
最近编C#程序,因为初学,不是太清楚,碰到了toolstripMenu中分割线设置的问题.遍寻中文网页,都是语言不详的,甚是呕人. 上网找了个外文网站,给的答案甚是详细,先贴在下面. http://w ...
- Kubernetes之Controllers三
StatefulSets StatefulSet is the workload API object used to manage stateful applications. Note: Stat ...
- js数组常用方法,含es5
(1)基本的数组方法 1.join() Array.join()方法将数组中所有元素都转化为字符串并连接在一起,返回最后生成的字符串.可以自己指定分隔的符号,如果不指定,默认使用逗号 var arr ...