列表生成式写法:
  [ i*2 for i in range(10) ]
也可以带函数
  [ fun(i) for i in range(10) ] 生成器:一边循环一边计算的机制称为生成器。在常用函数中,使用yield语句来返回结果,一次只返回一个结果。(可以节省内存,只有在调用的时候才会生成相应的数据 )
特点:只记录当前的位置,只有一个__next__()方法。
和列表的区别:生成器只有在调用的时候才会生成。
生成器表达式:同列表解析语法,只不过是把列表解析的[]换成()
比如:
l = [ x*x for x in range(10)]
g = ( x*x for x in range(10))
这里:l就是一个列表,g是一个生成器
生成器的打印方法:1:使用__next__()函数(python3),2:使用for循环
赋值语句:a,b = b,a+b 相当于 t=(b,a+b) 为a=t[0],b=t[1]
实例:斐波纳契数列:除第一个和第二个数外,任意一个数都可由前2个数相加得到。
def fib(max):
n,a,b = 0,0,1
while n < max:
#print(b)
yield b
a,b = b,a+b
n += 1
#return 'done'
f = fib(100)
print('sfsfsd')
f.__next__() 使用生成器后,不会出现停顿,实现程序外部随时调用函数的值 yield 通过在单线程下实现并发运算的效果
send方法:唤醒并同时给yield 传值
next方法:只唤醒yield
生成器特点:

生成器唯一注意的事项:生成器只能遍历一次。

迭代对象:可以直接作用于for循环的对象统称为可迭代对象。(iterable) 如:列表,字典,集合等,还有生成器
迭代器:可以被next()函数调用要么返回下一个值,要么引起StopIteration异常的对象称为迭代器:iterator
内置方法:isinstance()方法可以判断一个对象是否是可迭代对象。
可迭代对象都可以通过:iter()函数变为迭代器iterator
a = [1,2,3]
b = iter(a)
print(b.__next__())
print(b.__next__())
迭代器的计算属于惰性计算,就是在需要返回下一个值时才会计算。
迭代器可以表示一个无限大的数据流。(如全体自然数)列表是则是不可以。
举例:
#首先获得迭代器(iterator)对象
it = iter([1,2,3,4,5])
while True:
try:
#获得下一个值
x = next(it)
export StopIteration:
# 遇到StopIteration就退出循环
break 举例:用生成器实现吃包子(基本的生产者/消费者模型)
 def consumer(name):  # 消费者
print(' %s 准备吃包子' % (name))
while True:
baozi = yield
print('%s 包子来了, %s 吃包子' % (baozi,name)) def producer(name): # 生产者
c1 = consumer('jack')
c2 = consumer('Anne')
c1.__next__()
c2.__next__()
print('%s 开始做包子........' % name)
for i in range(10):
time.sleep(1)
print('%s 做完2个包子' % name)
c1.send(i)
c2.send(i) # 执行生产者
producer('vivi')

举例:使用生成器生成进度条

def show_process(total):
"""使用生成器打印进度条"""
curr = 0
percent = 0
print('开始打印进度条')
while curr <= total:
if int((curr / total) * 100) > percent:
sys.stdout.write('#'*curr + '%s%%' % curr + '\r')
sys.stdout.flush()
percent = int((curr / total) * 100)
new_size = yield
curr += new_size x = show_process(100)
x.__next__()
for i in range(1,101):
x.send(1)

  

python学习之- 生成器/迭代器的更多相关文章

  1. python高级之生成器&迭代器

    python高级之生成器&迭代器 本机内容 概念梳理 容器 可迭代对象 迭代器 for循环内部实现 生成器 1.概念梳理 容器(container):多个元素组织在一起的数据结构 可迭代对象( ...

  2. 第三篇:python高级之生成器&迭代器

    python高级之生成器&迭代器   python高级之生成器&迭代器 本机内容 概念梳理 容器 可迭代对象 迭代器 for循环内部实现 生成器 1.概念梳理 容器(container ...

  3. Python学习---装饰器/迭代器/生成器的学习【all】

    Python学习---装饰器的学习1210 Python学习---生成器的学习1210 Python学习---迭代器学习1210

  4. python学习笔记(5)--迭代器,生成器,装饰器,常用模块,序列化

    生成器 在Python中,一边循环一边计算的机制,称为生成器:generator. 如: >>> g = (x * x for xin range(10)) >>> ...

  5. Python学习二(生成器和八皇后算法)

    看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...

  6. python学习-39 生成器总结

    总结 1.语法上和函数类似:生成器函数和常规函数几乎是一样的.它们都是使用def语句进行定义,差别在于,生成器使用yield语句返回一个值,常规函数使用return语句返回一个值. 2.自动实现迭代器 ...

  7. python学习之生成器

    4.6 生成器Generrator ​ 生成器本质就是迭代器.python社区生成器与迭代器是一种. ​ 生成器与迭代器的唯一区别:生成器是我们自己用python代码构建的 4.6.1生成器初识 py ...

  8. Python学习之路——迭代器

    迭代器 # 通过迭代器取值优缺点: # 优点:不依赖索引,完成取值 # 缺点:不能计算长度,不能指定位取值(只能从前往后逐一取值) 可迭代对象 ''' 可迭代对象: 有__iter__()方法的对象, ...

  9. python学习笔记四 迭代器,生成器,装饰器(基础篇)

    迭代器 __iter__方法返回一个迭代器,它是具有__next__方法的对象.在调用__next__方法时,迭代器会返回它的下一个值,若__next__方法调用迭代器 没有值返回,就会引发一个Sto ...

随机推荐

  1. iOS 利用UIWebView与JavaScript交互的最简单办法

    这里说的是针对iOS的!并且方法很简单!!并且验证可行的!!! 1, UIWebView调用 JavaScript 的函数: NSString* strValue = [webView stringB ...

  2. checking for gcc... no

    ./configure 后显示checking for gcc... nochecking for cc... nochecking for cl.exe... noconfigure.sh:erro ...

  3. checkbox设置复选框的只读效果不让用户勾选

    在Web开发中,有时候需要显示一些复选框(checkbox),表明这个地方是可以进行勾选操作的,但是有时候是只想告知用户"这个地方是可以进行勾选操作的"而不想让用户在此处勾选(比如 ...

  4. 关于dzzoffice 破解版

    最近看到很多人在搜索dzzoffice破解版,其实dzzoffie是一款全开源的产品,开放的功能是与演示站中一摸一样的,所以并不会有人破解这种全开源的系统.那么为什么会有人搜索这样的关键词呢? 可能大 ...

  5. type和isinstance区别

    type只能对类型做直接的判断,主要用于获取未知变量的类型. 在程序中几乎很少用到type. 而isinstance功能比type更强,可以对子类型做出推理判断. isinstance主要用于判断A是 ...

  6. this.$emit('on-select-change' emit里面不能写大写字母

    this.$emit('on-select-change' emit里面不能写大写字母 刚试了下 也能写大写 但是 两边就都写一样就完了,就都写成带-的就完了

  7. final关键字所修饰的类有什么特点

    Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量. final类不能被继承,没有子类,final类中的方法默认是final的. final方法 ...

  8. 优先队列 || POJ 1442 Black Box

    给n个数,依次按顺序插入,第二行m个数,a[i]=b表示在第b次插入后输出第i小的数 *解法:写两个优先队列,q1里由大到小排,q2由小到大排,保持q2中有i-1个元素,那么第i小的元素就是q2的to ...

  9. Report Builder 打开报错

    提示:REP-0756:警告:找不到PL/SQL程序库’inv.pll’. 解决办法 处理:1.运行 ---输入REgedit ,在注册表内,查找注册表项Reports_path. 2.将下载的.pl ...

  10. 「 HDOJ P3887 」 Counting Offspring

    翻译 题目描述 给你一棵树,和它的树根 $P$,并且节点从 $1\rightarrow n$ 编号,现在定义 $f(i)$ 为 $i$ 的子树中,节点编号小于 $i$ 的节点的个数. 输入格式 有多组 ...