迭代器&生成器
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:woshinidaye 4 5 # for i in range(10): 6 # print(i) 7 8 # a = [] 9 # for i in range(10): 10 # a.append(i*2) 11 # print(a) 12 # b = [i**i for i in range(10)] #列表生成式 13 # print(b) 14 15 # #如果一个列表的数量特别大,而且是有一定规律的,一次性全部写出来有点浪费空间,可以把这种有规律的搞成一个生成器,generator 16 # l = [i for i in range(1000)] 17 # print(l,'\n------>>',type(l)) 18 # g = (i for i in range(1000)) 19 # print(g,'\n------>>',type(g)) 20 # for i in g: 21 # if i > 100 and i <120: 22 # print('====>',i) 23 # print(l[100]) 24 # # print(g[100]) #会报错,因为没有下标,他是从头往后计算,没有前面的数值,后面就没有生成 25 26 # def feb(max): 27 # n,a,b=0,0,1 28 # while n < max: 29 # print(b) 30 # a,b = b,a+b #a=b , b= a+b a,b = c,d 表示 a=c 、b =d 31 # # print('===>>',b) 32 # n = n +1 33 # return 'done' 34 # feb(10) 35 36 # #变成generator!!!!!! 37 # def feb(max): 38 # n,a,b=0,0,1 39 # while n < max: 40 # # print(b) 41 # yield b 42 # a,b = b,a+b #a=b , b= a+b a,b = c,d 表示 a=c 、b =d 43 # # print('===>>',b) 44 # n = n +1 45 # return '404' #函数执行完了才会返回值,这里可以用到异常情况时的返回值 46 # print(feb(10)) #<generator object feb at 0x00000185B6329580> 47 # for i in feb(10): 48 # print(i) 49 # f = feb(100) 50 # while True: 51 # try: 52 # x = next(f) 53 # print('f:',x) 54 # except StopIteration as e: 55 # print('错误了', e.value) 56 # break 57 58 # #yield实现并行效果,单进程 59 # import time 60 # def consumer(name): 61 # print('%s 准备吃包子' %name) 62 # while True: 63 # baozi = yield #yield 是保存当前状态,然后直接返回,下一次调用从这里开始。 64 # print('%s 包子来了,被%s吃了' %(baozi,name)) 65 # # c = consumer('woshinidaye') 66 # # print(type(c)) 67 # # c.__next__() 68 # # c.send('xianrou') #send可以给yield传值。。 69 # def producer(pro): 70 # c = consumer('woshinidaye') 71 # c.__next__() 72 # print('我要开始做包子了!!!!!!') 73 # for i in range(1000): 74 # # time.sleep(2) 75 # print('%s 做了一个包子' %pro) 76 # c.send('第%s个' %(i+1)) 77 # producer('test') 78 79 a = 'rtfyugihi' 80 for i in a : 81 print(i) 82 #能用于for巡检的数据类型:一类是集合数据类型list tuple str dict set ,另一类是生成器 83 #可循环的对象统称为Iterable,可迭代对象 84 #可以被next()函数调用并不断返回下一个值的对象成为迭代器:Iterator 85 from collections.abc import Iterator 86 print(isinstance('qwrwq',Iterator)) 87 print(isinstance([],Iterator)) 88 print(isinstance((i for i in range(10)),Iterator)) 89 #可以将list set dict 等Iterable变成Iterator,使用iter()函数 90 print(isinstance(iter('rtyguh'),Iterator)) 91 for i in iter('rdtygu'): 92 print(i)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言
2020-11-05 抽空学学KVM(八):虚拟机的网络---Bridge模式