python-迭代器demo

来源:互联网 发布:沈阳浟湙网络怎么样 编辑:程序博客网 时间:2024/06/04 18:01
#迭代器是是一个定义了__iter__()方法的类。__init__,__iter__,__next__,起始和结束都是一对下划线,这些方法不是直接调用的,当使用类或实例的某些语法时,python会自动调用它们。class Fib:def __init__(self,max):  #调用Fib(max)会创建该类的一个真实的实例,并以max作为参数调用__init__()方法。__init__()方法以实例变量保存最大值,以便其它方法可以引用。self.max = maxdef __iter__(self):  #当有人调用iter(fib),__iter__()就会被调用,for循环会自动调用它,在完成迭代初始化后,__iter__()能返回任何实现了__next__()方法的对象self.a = 0self.b = 1return selfdef __next__(self):  #当在迭代器的实例中调用next()方法时,__next__()会自动调用。fib = self.aif fib > self.max:raise StopIteration  #当__next__()抛出StopIteration异常,这是给调用者表示迭代用完的信号,和大多数异常不同,这不是错误,是正常情况,仅表示迭代器没有值了。self.a,self.b = self.b,self.a + self.breturn fib#fi=Fib(5)#print (fi)for n in Fib(10000):print(n,end=' ')
#!/usr/bin/python# encoding: utf8class LazyRules:rules_filename = 'plural-rules.txt'def __init__(self):self.pattern_file = open(self.rules_filename,encoding='utf-8') #打开文件模式,但不读取任何内容self.cache = []                              #初始化缓存def __iter__(self):self.cache_index = 0return selfdef __next__(self):self.cache__index += 1if len(self.cache) >= self.cache__index:return self.cache[self.cache__index - 1]if self.pattern_file.closed:raise StopIterationline = self.pattern_file.readline()if not line:self.pattern_file.close()raise StopIterationpattern,search,replace = line.split(None,3)funcs = build_match_and_apply_functions(pattern,search,replace)self.cache.append(funcs)return funcs rules = LazyRules()print (rules)


原创粉丝点击