迭代器 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的更多相关文章

  1. Python Cook函数笔记 【第一章】

    2017年4月28日 19:29:52 解压赋值给多个变量 可迭代的对象(list,tuple,string,文件对象,迭代器,生成器等),都可以进行解压赋值给多个对象. #!/usr/bin/env ...

  2. python cook 整理

    1.字符串分割 单个分隔符    'abc'.split('b')  >> ['a','c'] 多个分隔符    re.split(r'[b,d]','abcde') >>&g ...

  3. Python强大的格式化format

    原文地址:http://www.jb51.net/article/63672.htm 自python2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足.那么,他跟之前的%型 ...

  4. Python零散函数

    1. python json.dumps() json.dump()的区别 注意cat ,是直接输出文件的内容 load和loads都是实现"反序列化",区别在于(以Python为 ...

  5. python相关资料链接

    后续的博客更新,会涉及到很多的python及python的框架相关的内容,这里将自己收藏的一些关于python相关资料的链接做一个整理,算是一个导航索引吧... PS:其中有些链接对应的技术团队文章, ...

  6. python代码执行bash命令 -- python3 cook book

    python代码执行bash命令相关 -- python3 cook book refer: https://python3-cookbook.readthedocs.io/zh_CN/latest/ ...

  7. python征程3.1(列表,迭代,函数,dic,set,的简单应用)

    1.列表的切片. 1.对list进行切片.'''name=["wangshuai","wangchuan","wangjingliang", ...

  8. python Django session/cookie

    一, Cookie #cookie # def cook1(request): # print(request.COOKIES) # 查看cooke # # print(request.get_sig ...

  9. Python标准库14 数据库 (sqlite3)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.S ...

随机推荐

  1. 实现 SPA 的三种方式

    什么是SPA? 单页Web应用(single page web application,SPA),就是只有一张Web页面的应用,是加载单个HTML 页面并在用户与应用程序交互时动态更新该页面的Web应 ...

  2. Office 2016 永久激活

    启示:office突然过期,QWQ,卖电脑的真坑爹,找了好多办法,总结2个不花钱的办法啦. 1>只有30天试用期 Office 2016预览版序列号:NKGG6-WBPCC-HXWMY-6DQG ...

  3. Bootstrap3基础 container 浏览器宽度与容器宽度的四种配合

      内容 参数   OS   Windows 10 x64   browser   Firefox 65.0.2   framework     Bootstrap 3.3.7   editor    ...

  4. Python3 tkinter基础 Canvas background 创建白色的画布 create_line width 画宽的线

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  5. linux内核中的最简单的输入输出调度算法noop

    1. noop是什么? noop是一种输入输出调度算法 2. noop的别称 又称为电梯调度算法 3. noop原理是怎样的? 将输入输出请求放到一个FIFO队列中,然后按次序执行队列中的输入输出请求 ...

  6. 通过WSL在Windows下安装子Linux系统

    一.开启开发者模式 步骤: -> 系统设置 -> 更新和安全 -> 针对开发人员 -> 选择开发者模式 点击后会自动安装环境 二.启用WSL 步骤: -> 系统设置 -& ...

  7. 【做题】NOWCODER142A Ternary String——数列&欧拉定理

    题意:你有一个长度为\(n\),且仅由012构成的字符串.每经过一秒,这个字符串所有1后面会插入一个0,所有2后面会插入一个1,然后会删除第一个元素.求这个字符串需要多少秒变为空串,对\(10^9+7 ...

  8. 什么是 Meta Learning / Learning to Learn ?

    Learning to Learn Chelsea Finn    Jul 18, 2017 A key aspect of intelligence is versatility – the cap ...

  9. Ambari配置Hive,Hive的使用

    mysql安装,hive环境的搭建 ambari部署hadoop 博客大牛:董的博客 ambari使用 ambari官方文档 hadoop 2.0 详细配置教程 使用Ambari快速部署Hadoop大 ...

  10. window下的Django入门

    一.window下新建安装(参考书籍:<python编程:从入门到实践>) 新建一个文件夹 learning_log ,在终端中切换到该目录下,并创建一个虚拟工作环境,运行模块 venv  ...