迭代器 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. dubbo接口FindMemberInfoTest思路整合

    package com.yzb.user_center; /** * @Created by IntelliJ IDEA. * @Author tk * @Date 2018/7/31 * @Time ...

  2. topcoder srm 510 div1

    problem1 link 令$f(x)$表示[0,x]中答案的个数.那么题目的答案为$f(b)-f(a-1)$ 对于$f(x)$来说,假设$x$有$d$位数字,即$[0,d-1]$,那么可以进行动态 ...

  3. ODAC(V9.5.15) 学习笔记(十三)TOraMetaData

    通过TOraMetaData控件获取Oracle数据库对象信息,首先需要设置MetaDataKind属性,然后设置Restrictions属性设置条件,最后通过激活数据集获取信息,演示代码如下: Me ...

  4. Oracle 11g 导出数据报 “ORA-01455: 转换列溢出整数数据类型”的问题

    最近发现云服务器上的Oracle 11g在导出时报错,如下: ... . 正在导出后期表活动. 正在导出实体化视图. 正在导出快照日志EXP-00008: 遇到 ORACLE 错误 1455ORA-0 ...

  5. uniGUI试用笔记(二)

    前几天做的demo今天启动后,浏览器打开页面后死活不显示窗体,找了半天原因才发现是360浏览器启动了兼容模式,改成极速模式后就正常了.有点晕.... 今天简单测试了TUniGUIServerModul ...

  6. 如何在gvim中安装autoproto自动显示函数原型

    cankao: http://www.vim.org/scripts/script.php?script_id=1553 注意, 在gvim中执行的命令, :foo和:!foo 的区别, 跟vim一样 ...

  7. win10安装Zookeeper3.4.12

    为了方便在本地开发环境进行调试,希望在win10环境中安装一个zookeeper 安装: 下载: 下载最新的stable版 zookeeper-3.4.12.tar.gz 配置环境变量: ZOOKEE ...

  8. Docker 安装Hadoop HDFS命令行操作

    网上拉取Docker模板,使用singlarities/hadoop镜像 [root@localhost /]# docker pull singularities/hadoop 查看: [root@ ...

  9. 推荐一个静态博客兼笔记的工具:WDTP

    简介 WDTP(山湖录)不止是一款开源免费的GUI桌面单机版静态网站生成器和简单方便的前端开发工具,更是一款跨平台的集笔记.录音.个人知识管理.写作/创作.博客/网站内容与样式管理等功能于一体的多合一 ...

  10. communication

    Always consider the challenge as a chance. Basic principles: Know your audience. Know your purpose. ...