WEB开发网
开发学院软件开发Python 可爱的 Python: 迭代器和简单生成器 阅读

可爱的 Python: 迭代器和简单生成器

 2008-11-13 13:17:36 来源:WEB开发网   
核心提示: 这个函数是十分友好的存储器,它只需要记住一个以前的值,可爱的 Python: 迭代器和简单生成器(4),返回一个单个数字(不是一个数字的大列表),并且与此类似的一个函数可以返回取决于(部分地或完全地)外部事件的连续的值,则显而易见要用定制类来产生它们自己的迭代器,而不是专使用内置类型的迭代

这个函数是十分友好的存储器。它只需要记住一个以前的值,返回一个单个数字(不是一个数字的大列表)。并且与此类似的一个函数可以返回取决于(部分地或完全地)外部事件的连续的值。不利的一面是,利用这个函数有点不够简练,且相当不灵活。

静态随机遍历的迭代

num = randomwalk_static()
while num is not None:
  print num,
  num = randomwalk_static()

新的遍历方法

实质上,Python 2.2 序列都是迭代器。Python 常见的习惯用法 for elem in lst: 现在实际上让 lst 产生一个迭代器。然后, for 循环反复调用这个迭代器的 .next() 方法,直到它遇到 StopIteration 异常为止。幸运的是,由于所有常见的内置类型自动产生它们的迭代器,所以 Python 程序员不需要知道这里发生了什么。实际上,现在字典里有 .iterkeys() 、 .iteritems() 和 .itervalues() 方法来产生迭代器;首要的是在新的习惯用法 for key in dct: 中使用了什么。同样,通过调用 .readline() 迭代器支持新的习惯用法 for line in file: 。

但是如果实际所产生的是在 Python 解释器内,则显而易见要用定制类来产生它们自己的迭代器,而不是专使用内置类型的迭代器。定制类支持直接使用 randomwalk_list() 以及一次一个元素这种“极度节省”的 randomwalk_static ,它是简单易懂的:

RandomWalk_Iter.py

  
     import
    
     random
  
     class
  
     randomwalk_iter
    
    :
  
     
     def
  
     __init__
    
    (self):
    self.last = 1       
    
    # init the prior value
    self.rand = random.random()
    
    # init a candidate value
     
     
     def
  
     __iter__
    
    (self):
  
     
     return
    
     self        
    
    # simplest iterator creation
     
     
     def
  
     next
    
    (self):
  
     
     if
    
     self.rand < 0.1:    
    
    # threshhold terminator
             
     
     raise
    
     StopIteration  
    
    # end of iteration
         
     
     else
    
    :           
    
    # look for usable candidate
             
     
     while
    
     abs(self.last-self.rand) < 0.4:
  
     
     print
    
     '*',     
    
    # display the rejection
        self.rand = random.random()
    
    # new candidate
      self.last = self.rand 
    
    # update prior value
              
     
     return
    
     self.rand
   

上一页  1 2 3 4 5 6 7  下一页

Tags:可爱 Python 迭代

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接