标签: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