概述
#迭代器是是一个定义了__iter__()方法的类。__init__,__iter__,__next__,起始和结束都是一对下划线,这些方法不是直接调用的,当使用类或实例的某些语法时,python会自动调用它们。
class Fib:
def __init__(self,max): #调用Fib(max)会创建该类的一个真实的实例,并以max作为参数调用__init__()方法。__init__()方法以实例变量保存最大值,以便其它方法可以引用。
self.max = max
def __iter__(self): #当有人调用iter(fib),__iter__()就会被调用,for循环会自动调用它,在完成迭代初始化后,__iter__()能返回任何实现了__next__()方法的对象
self.a = 0
self.b = 1
return self
def __next__(self): #当在迭代器的实例中调用next()方法时,__next__()会自动调用。
fib = self.a
if fib > self.max:
raise StopIteration #当__next__()抛出StopIteration异常,这是给调用者表示迭代用完的信号,和大多数异常不同,这不是错误,是正常情况,仅表示迭代器没有值了。
self.a,self.b = self.b,self.a + self.b
return fib
#fi=Fib(5)
#print (fi)
for n in Fib(10000):
print(n,end=' ')
#!/usr/bin/python
# encoding: utf8
class 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 = 0
return self
def __next__(self):
self.cache__index += 1
if len(self.cache) >= self.cache__index:
return self.cache[self.cache__index - 1]
if self.pattern_file.closed:
raise StopIteration
line = self.pattern_file.readline()
if not line:
self.pattern_file.close()
raise StopIteration
pattern,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)
最后
以上就是标致身影为你收集整理的python-迭代器demo的全部内容,希望文章能够帮你解决python-迭代器demo所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复