您的位置:首页 > 编程语言 > Python开发

Python学习笔记-Day03 -第三部分(迭代器和生成简介)

2015-11-09 18:43 716 查看
迭代器
迭代器是一个容器对象,有两个基本方法
netxt() #返回容器的下一个元素
__iter__ #返回迭代器自身

迭代器自2.2版本
被加入python,它为类序列对象提供了一个类序列的接口,从根本上说,迭代器就是有一个next()方法的对象,而不是通过索引来记数,当你
或者一个循环机制(比如for)需要下一个项时,调用迭代器的next() 方法
就可以获取到它,条目全部取出后,或引发一个StopIteration异常,你并看不到该异常,python内部会处理该异常,目的只是为了告诉
外部调用者迭代完成。
迭代器也有一些限制,例如不能向后移动,不能回到开始,也不能复制一个迭代器,如果需要再迭代同一个对象,只能通过创建另一个迭代器对象的方法实现,
一个大优点,不需要提前准备好整个迭代过程中所有的元素,迭代器仅仅在迭代到某个元素的时候才会计算该元素,在此之前或之后,元素可以不存在或者被销毁。在遍历一些特别巨大的或者为无限的集合时特别有用。
###################################################################################
生成器
生成器是python2.2时,添加的一个重要特性,生成器是特定的函数,允许你返回一个值,然后‘暂停‘或者’挂起‘代码的执行,稍后再恢复。
从语法上讲,生成器是一个带有yield语句(yield语句的功能是,暂定执行并返回一个中间的结果)的函数,
range不是生成器 和 xrange 是生成器
readlines不是生成器 和 xreadlines 是生成器
>>> print range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print xrange(10)
xrange(10)
生成器内部基于yield创建,即:对于生成器只有使用时才创建,从而不避免内存浪费
冒泡排序
练习:
有如下列表:
[13, 22, 6, 99, 11]
请按照一下规则计算:
13 和 22 比较,将大的值放在右侧,即:[13, 22, 6, 99, 11]
22 和 6 比较,将大的值放在右侧,即:[13, 6, 22, 99, 11]
22 和 99 比较,将大的值放在右侧,即:[13, 6, 22, 99, 11]
99 和 42 比较,将大的值放在右侧,即:[13, 6, 22, 11, 99,]
13 和 6 比较,将大的值放在右侧,即:[6, 13, 22, 11, 99,]
...
li = [13, 22, 6, 99, 11]
for m in range(len(li)-1):
for n in range(m+1, len(li)):
if li[m]> li
:
temp = li

li
= li[m]
li[m] = temp
print li

51cto博客地址 http://timesnotes.blog.51cto.com http://timesnotes.blog.51cto.com/1079212/1711145
本博客地址: http://www.timesnotes.com/ http://www.timesnotes.com/?p=91

本文出自 “Will的笔记” 博客,请务必保留此出处http://timesnotes.blog.51cto.com/1079212/1711145
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: