生成器,生成器推导式和列表推导式

生成器

什么是生成器

python社区,大部分生成器和迭代器是一种.生成器的本质是迭代器.
唯一区别:生成器是我们自己用python代码构建的数据结构.迭代器都是提供的,或者转化得来的.

获取生成器的三种方式:

- 生成器函数
- 生成器表达式
- python提供的

生成器函数

- yield
- 一个next 对应一个yield(yield和下一个yield中间有代码的话只执行一个next时,会停在第一个yield处)
def s():
	li=[1,2,3,4,5]
	for i in li:
		yeild i

yield 与 return的区别

- return:函数中只存在一个被执行的return,结束函数,并且给给函数的执行者返回值.
- yield:只要有yiedl那么她就是生成器函数而不是函数了.生成器函数中可以存在多个yield,一个yield对应一个next
- yield 和return 可以同时存在,如果return先执行了,next()会取不成值.会报错

yield from

- 将li这个列表变成了一个迭代器返回.每一个next返回一个列表一个元素
- 优化了内层循环,降低了时间复杂度.提高开发效率
def gen_fun():
    li = [1,2,3,4,5,6]
    yield from li
    
ret = gen_fun()
print(next(ret))
print(next(ret))
print(next(ret))			依次返回列表元素

生成器表达式,列表推导式

列表推到式

- 循环模式:[变量(加工后的变量) for 变量 in iterable]
	[a for a in [1,2,3]]
- 筛选模式:[变量(加工后的变量) for 变量 in iterable if 条件]
	[a for a in [1,2,3] if a>2]

生成器表达式

与列表推导式的写法几乎一模一样,也有筛选和循环模式.也可以多层循环构建
将列表[] 变成() 就变成生成器
posted @ 2019-10-23 16:04  路一  阅读(247)  评论(0编辑  收藏  举报