码迷,mamicode.com
首页 > 其他好文 > 详细

生成器攻略

时间:2017-08-05 21:14:56      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:iterable   返回值   迭代器   运算   而不是   功能   开始   表达式   turn   

你第一次看到生成器的样子so beautiful !!!

 

首先  我们学习的迭代器有两种:

1. 调用方法直接返回。   map 和 fileter  (这个我最开始看到也蒙了, 上一篇没有写啊,

于是我问了老师和同学,  暂且先把这个东西就这样记。)

2。 可迭代对象通过执行 iter 方法得到。

 

我们写的能实现迭代器功能的东西就叫做生成器。

 

python 中给我们提供的有生成器:

1:生成器函数:和正常函数定义一样,但是,but but but   生成器是使用 yield 语句而不是 return 语句返回结果。yield 语句一次只返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行

 

2: 生成器表达式: 类似于列表推导(列表推导什么鬼。。。),but but but ,生成器返回按需求产生结果的一个对象,而不是一次构建一个结果列表。    我自己理解的最后这句话意思就是,这个表达式每次只返回一个值, 你要一个我给你一个, 你不要就不要 我也不会硬塞给你。

 

 

生成器Generatol  (顺便回顾下迭代器 iterator 和可迭代的 iterable )

  本质:迭代器(因为自带了__iter__ 和__next__方法,所以不需要我们去实现

  特点: 惰性运算,开发者自定义(开发者自定义什么鬼)

 

生成器函数:

  一个包含了 yield 关键字的函数就是一个生成器函数。yield 可以为我们从函数中返回值。

  yield 和 return 的区别:

return 的执行意味着程序的结束,调用生成器函数不会得到返回的具体的值,而是得到一个可迭代的对象。 y

ield每一次获取这个可迭代对象的一个值,就能推动函数的执行,获取新的返回值,直到函数执行结束。

 

来,操练起来。

#先定义函数
import time
def genrator_fun():
a = 3
print(‘现在定义了变量 a‘)
yield a
n = a
print(n)
b = 2
print(‘ 现在定义了变量 b‘)
yield b

g1 = genrator_fun()
print(‘g1:‘,g1)# 这个 print 是看这个 g1 是什么鬼
print(‘=‘*20)
print(next(g1))
time.sleep(1)
print(next(g1))

====================
现在定义了变量 a
3
3
现在定义了变量 b
2

 

生成器的好处: 不会一下子在内存中生成太多数据。

 



 

生成器攻略

标签:iterable   返回值   迭代器   运算   而不是   功能   开始   表达式   turn   

原文地址:http://www.cnblogs.com/ugfly/p/7291311.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!