码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-11-10 01:56:36      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:python   生成器   迭代器   

迭代器

迭代器是一个容器对象,有两个基本方法

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[n]:
temp = li[n]
li[n] = 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

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

标签:python   生成器   迭代器   

原文地址:http://timesnotes.blog.51cto.com/1079212/1711145

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!