zoukankan      html  css  js  c++  java
  • python 生成器

    1.迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和next()方法。其中__iter__()方法返回迭代器对象本身;next()方法返回容器的下一个元素,在结尾时引发StopIteration异常。

    class MyRange(object):
        def __init__(self, n):
            self.idx = 0
            self.n = n
            
        def __iter__(self):
            return self
            
        def next(self):
            if self.idx < self.n:
                val = self.idx
                self.idx += 1
                return val
            else:
                raise StopIteration()
    
    if __name__ == "__main__":
    	for i in MyRange(3):
    		print i
    
    '''
    0
    1
    2
    [Finished in 0.2s]
    '''
    

      

    2.生成器就是一种迭代器。生成器拥有next方法并且行为与迭代器完全相同,这意味着生成器也可以用于Python的for循环中。另外,对于生成器的特殊语法支持使得编写一个生成器比自定义一个常规的迭代器要简单不少,所以生成器也是最常用到的特性之一。

    def fibonacci(num=5):
    	a = 1
    	b = 1
    	yield a
    	yield b
    	while num>0:
    		a,b=b,(a+b)
    		yield b
    		num -=1
    
    if __name__ == "__main__":
    	for i in fibonacci():
    		print(i)
    
    	print("*")*20
    
    	f = fibonacci()
    	while True:
    		print(f.next())
    
    '''
    1 1 2 3 5 8 13 ******************** 1 1 2 3 5 8 13 print(f.next()) StopIteration '''

      3.生成器中还有两个很重要的方法:send()和close()。close() 强制停止迭代

    def MyRange(n):
    	i = 0
    	while i<n:
    		val = yield i
    		print"val is ",val
    		i+=1
    
    
    if __name__ == "__main__":
    	m = MyRange(5)
    	print m.next()
    	print m.next()
    	print m.send("A")
    	print m.send("B")
    	# print m.close()
    	print m.send("C")
    
    '''
    0
    val is  None
    1
    val is  A
    2
    val is  B
    3
    val is  C
    4
    [Finished in 0.2s]
    '''
    

      

  • 相关阅读:
    Flip Game(枚举)Poj
    Ubuntu下启动Eclipse报错:A Java RunTime Environment (JRE) or Java Development Kit (JDK) must
    [cocos2dx笔记012]一定简易的UI配置类
    [MSSQL]採用pivot函数实现动态行转列
    (八十八)VFL语言初步
    Leetcode 218 The Skyline Problem
    mac 下作流程图工具omnigraffle
    JSP生成word文件
    状态压缩dp poj 3254 hdu5045
    hdu 1215 七夕节
  • 原文地址:https://www.cnblogs.com/alamZ/p/7152833.html
Copyright © 2011-2022 走看看