Chinaunix首页 | 论坛 | 博客
  • 博客访问: 575682
  • 博文数量: 226
  • 博客积分: 10080
  • 博客等级: 上将
  • 技术积分: 1725
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-26 11:15
文章分类

全部博文(226)

文章存档

2011年(5)

2010年(64)

2009年(99)

2008年(37)

2007年(21)

我的朋友

分类: LINUX

2010-05-20 22:00:14

    
for 语句可以用大多数容器对象,如:
for e in [1,2,3]:
   print e
for e in (1,2,3):
   print e
for line in open("myfile.txt"):
   print line
--------
for 语句先调用容器对象的iter(),该函数返回一个定义了next()方法的迭代器对象,它在容器中逐一访问对象。
访问结束时候,next()会抛出一个异常(StopIteration)通知for语句循环结束,
 
class Reverse:
    def __init__(self,data):
        self.data = data
        self.index = len(data)
    """定义iter返回的方法 """
    def __iter__(self):
        return self
    """ 定义next方法"""
    def next(self):
        if self.index == 0:
            raise StopIteration
        self.index = self.index -1
        return self.data[self.index]
   
for char in Reverse('spam'):
    print char
   
m
a
p
s
--------------------------------------
定义容器类的另一个方法,通过生成器
def reverse(data):
    for index in range(len(data)-1,-1,-1):
        yield data[index]
 
>>>for char in reverse('golf'):
>>     print char
 
自动创建__iter__()和next()方法。两次调用之间临时变量和执行情况自动被保存起来,生成器结束的时候自动抛出StopIteration异常。
 
 
 
阅读(737) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~