迭代和生成器
1 2 3 4 5 | '''列表迭代的本质:__iter()__函数返回一个迭代器,然后可以调用迭代器上的next方法''' arr = [ 1 , 2 , 3 , 4 , 5 ] arr_iterator = arr.__iter__() print (arr_iterator.__next__()) print ( next (arr_iterator)) |
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 | '''一个典型的迭代器实现。例子来自《流畅的python》.''' import re import reprlib RE_WORD = re. compile ( '\w+' ) class Sentence: def __init__( self ,text): self .text = text self .words = RE_WORD.findall(text) def __repr__( self ): return 'Sentence(%s)' % reprlib. repr ( self .text) def __iter__( self ): return SentenceIterator( self .words) class SentenceIterator: def __init__( self ,words): self .words = words self .index = 0 def __next__( self ): try : word = self .words[ self .index] except IndexError: raise StopIteration() self .index + = 1 return word def __iter__( self ): return self s = Sentence( 'abDdd a dd dw' ) for i in s: print (i) |
1 2 3 4 5 6 7 8 9 | '''用生成器创建的迭代对象。''' def frange(start, stop, increment): x = start while x < stop: yield x x + = increment for i in frange( 0 , 5 , 0.5 ): print (i) |
'''用生成器实现费波切纳算法''' import sys def fibonacci(n): # 生成器函数 - 斐波那契 a, b, counter = 0, 1, 0 while True: if (counter > n): return yield a a, b = b, a + b counter += 1 f = fibonacci(10) # f 是一个迭代器,由生成器返回生成 while True: try: print(next(f), end=" ") except StopIteration: sys.exit()
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· .NET 开发的分流抢票软件,不做广告、不收集隐私
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· 开箱你的 AI 语音女友「GitHub 热点速览」
· 前端实现 HTML 网页转 PDF 并导出
· 特斯拉CEO埃隆.马斯克的五步工作法,怎么提高工程效率加速产品开发?