Python学习笔记010_迭代器_生成器
迭代器
迭代就类似于循环,每次重复的过程被称为迭代的过程,每次迭代的结果将被用来作为下一次迭代的初始值,提供迭代方法的容器被称为迭代器。
常见的迭代器有 (列表、元祖、字典、字符串、文件 等),通常我们是使用for语句完成迭代
#使用for 迭代字典的例子:>>> links = {"鱼C工作室":"http://www.fishc.com/",
"鱼C论坛":"http://bbc.fishc.com"}
>>> for each in links:
print("%s-->%s" %(each,links[each]));
鱼C论坛-->http://bbc.fishc.com
鱼C工作室-->http://www.fishc.com/
>>>
Python自己提供了两个BIF函数 iter() , next()
对于一个对象使用iter()函数就得到它的迭代器对象
调用next()迭代器就会返回下一个值
迭代结束的标识:Python抛出一个StopIteration异常.
>>> string = "
>>> it = iter(string)
>>> next(it)
'
>>> next(it)
'
>>> next(it)
'
>>> next(it)
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
next(it)
StopIteration
>>>
iter()对应的魔法方法是__iter__(), next()对应的魔法方法是__next__()
__iter__() 实际上是 return self, next()决定了迭代器的规则
>>> class Fibs:
def __init__(self,n=10):
self.a = 0
self.b = 1
self.n = n
def __iter__(self):
return self
def __next__(self):
self.a,self.b = self.b,self.a+self.b
if self.a>self.n:
raise StopIteration
return self.a
>>> fibs = Fibs()
>>> for each in fibs:
print(each)
1
1
2
3
5
8
>>> fibs = Fibs(100)
>>> for each in fibs:
print(each)
1
1
2
3
5
8
13
21
34
55
89
>>>
生成器
一旦一个函数中有 yield,它就是生成器 , yield相当于return,函数遇到yield就会返回yield后面的值,函数处于暂停状态
生成器是一个特殊的迭代器
协同程序:可以运行的独立函数调用,函数可以暂停或者挂起,并在需要的时候从程序离开的地方继续或者重新开始.
>>> def MyGen():
print ("生成器被执行!")
yield 1
yield 2
>>> myG = MyGen()
>>> next(myG)
生成器被执行!
1
>>> next(myG)
2
>>> next(myG)
Traceback (most recent call last):
File "<pyshell#69>", line 1, in <module>
next(myG)
StopIteration
>>>
生成器推导式的应用.
>>> #列表推导式
>>> # 在列表中加一个for语句
>>> a = [i for i in range(50) if not (i%2) and i%3]
>>> a
[2, 4, 8, 10, 14, 16, 20, 22, 26, 28, 32, 34, 38, 40, 44, 46]
>>>
>>> #字典推导式
>>> b = {i:i%2==0 for i in range(10)}
>>> b
{0: True, 1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False}
>>>
>>> # 集合推导式
>>> c = {i for i in [1,2,3,2,4,2,4,6,4,7]}
>>> c
{1, 2, 3, 4, 6, 7}
>>> #元组
>>> e = (i for i in range(10))
>>> e
<generator object <genexpr> at 0x02113030>
>>> # 这里的e就是生成器 推导式
>>> next(e)
0
>>> for each in e:
print(each)
1
2
3
4
5
6
7
8
9
>>> # 生成器推导式作为函数的参数时,不用加括号
>>> sum(i for i in range(100) if i%2)
2500
>>>
扩展阅读:解释 yield 和 Generators(生成器)
Python学习笔记010_迭代器_生成器的更多相关文章
- python学习笔记四 迭代器,生成器,装饰器(基础篇)
迭代器 __iter__方法返回一个迭代器,它是具有__next__方法的对象.在调用__next__方法时,迭代器会返回它的下一个值,若__next__方法调用迭代器 没有值返回,就会引发一个Sto ...
- python学习笔记之迭代器和函数(第三天)
一.collection系列: 1.counter计数器 如果counter(dict)是对字典的一个补充,如果counter(list)则是对列表的补充,初步测试对字典的值进行排序. ####### ...
- python学习笔记(5)--迭代器,生成器,装饰器,常用模块,序列化
生成器 在Python中,一边循环一边计算的机制,称为生成器:generator. 如: >>> g = (x * x for xin range(10)) >>> ...
- python 3.x 学习笔记6 ( 迭代器 and 生成器 )
1.迭代器(Iterator): 可以被next()函数调用并不断返回下一个值的对象,成为迭代器:Iterator 可以直接用于for 循环的对象统称为可迭代对象:Iterable 迭代,顾名思 ...
- Python学习之路——迭代器、生成器、算法基础、正则
一.迭代器: 迭代器是访问集合元素的一种方式. 迭代器对象是从集合的第一个元素开始访问,直到所有的元素被访问完结束. 迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退. 另外,迭代 ...
- Python学习(三):迭代器、生成器、装饰器、递归、算法、正则
1.迭代器 迭代器是访问集合的一种方式,迭代对象从集合的第一个元素开始访问,直到元素被访问结束,迭代器只能往前不能后退,最大的优点是不要求事先准备好整个迭代过程中的元素,这个特点使得它特别适合用于遍历 ...
- python3学习笔记10(迭代器和生成器)
参考http://www.runoob.com/python3/python3-iterator-generator.html 迭代器 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束 ...
- Python学习笔记014——迭代器 Iterator
1 迭代器的定义 凡是能被next()函数调用并不断返回一个值的对象均称之为迭代器(Iterator) 2 迭代器的说明 Python中的Iterator对象表示的是一个数据流,被函数next()函数 ...
- Python学习笔记:迭代器(Iterator)详解
一.可迭代的对象(Iterable) 1.定义:可以直接用在循环的数据类型,如list,tuple,dict,set,str,还有generator(生成器), 和带yield的函数,这些直接可以用在 ...
随机推荐
- webpack2+node+react+babel实现热加载(hmr)
前端工程化开发的一个重要标志就是热替换技术,它大大的提高开发效率,使我们专注于写代码,webpack2中的热替换相比较1更加简洁. 1. 先看效果 2.目录结构 3.项目目录结构文件描述 bin 执行 ...
- 定时任务备份数据库与windows批处理
前言: 关于数据库备份的方法有很多,你可以在命令行执行mysqldump命令进行备份,也可以使用数据库管理工具,比如navicat进行数据库的备份. 但是以上数据库的备份都是可以单次备份,总不能要一个 ...
- c#获取数组中最大的元素
, , , , , , , , , }; var max = array.Max();//获取数组中的最大值 第一种 //第二种方法 ]; ; i < array.Length; i++) { ...
- 【HotSpot】 jps
jps(1) General Commands Manual jps(1) Name jps - Java Virtual Machine Process Status Tool SYNOPSIS j ...
- 奇货商城重构——webpack自动化工程
近几年,前端各种框架工具层出不穷,从两三年前还是一个jQuery搞定全站,到之后requirejs/seajs,node,gulp/webpack,Angular/React/Vue,RN/weex的 ...
- Struts2简介以及初步搭建配置
一.基本介绍 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互. ...
- vue.js基础知识篇(4):过滤器、class与style的绑定2
代码下载:网盘 欢迎私信 第一章:过滤器 过滤器是对数据进行处理并返回结果的函数. 1.语法 语法是使用管道符"|"进行连接.过滤器可以接收参数,跟在过滤器后面,带引号的参数被当做 ...
- [2013-01-15]The Little Schemer 学习笔记
<The Little Schemer> FP编程.lisp入门必备 这书貌似没中文版: 有英文pdf版:完整版下载链接 英文不好的,被前几页噎住的,可以先到这里看翻译好的前言部分 看完人 ...
- sed武功心法(info sed翻译+注解)
本文中的提到GNU扩展时,表示该功能是GNU为sed提供的(即GNU版本的sed才有该功能),一般此时都会说明:如果要写具有可移植性的脚本,应尽量避免在脚本中使用该选项. 本文中的正则表达式几乎和gr ...
- 【C++小白成长撸】--(续)双偶数N阶魔阵
原理: 把双偶数N阶魔阵均分为(N/4)^2个4阶魔阵(4*4) 每个魔阵的对角线都标为"-1",其余位置标为"0" 从第一个位置(a[0][0])从左到右,从 ...