python 生成器
1.迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和next()方法。其中__iter__()方法返回迭代器对象本身;next()方法返回容器的下一个元素,在结尾时引发StopIteration异常。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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循环中。另外,对于生成器的特殊语法支持使得编写一个生成器比自定义一个常规的迭代器要简单不少,所以生成器也是最常用到的特性之一。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 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 ()) '''<br>1 1 2 3 5 8 13 ******************** 1 1 2 3 5 8 13 print(f.next()) StopIteration ''' |
3.生成器中还有两个很重要的方法:send()和close()。close() 强制停止迭代
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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] ''' |
标签:
python基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)