Python中的yield

Python生成斐波那契数列:

1:简单函数

def fab(max): 
   n, a, b = 0, 0, 1
   L = [] 
   while n < max: 
       L.append(b) 
       a, b = b, a + b 
       n = n + 1
   return L

2:支持 iterable 的 class

class Fab(object):     
   def __init__(self, max): 
       self.max = max
       self.n, self.a, self.b = 0, 0, 1
    
   def __iter__(self): 
       return self
    
   def next(self): 
       if self.n < self.max: 
           r = self.b 
           self.a, self.b = self.b, self.a + self.b 
           self.n = self.n + 1
           return r 
       raise StopIteration()

3:使用 yield

def fab(max): 
    n, a, b = 0, 0, 1
    while n < max: 
        yield b 
        # print b 
        a, b = b, a + b 
        n = n + 1
#保持简洁性的同时获得了 iterable 的效果

原文地址:http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/index.html

发表评论

电子邮件地址不会被公开。