迭代器&生成器

复制代码
 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)
复制代码

 

posted @   woshinidaye  阅读(34)  评论(0编辑  收藏  举报
编辑推荐:
· 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模式
点击右上角即可分享
微信分享提示