列表解析式
-
语法
- [ 返回值 for 元素 in 可迭代对象 if 条件 ]
- 使用中括号[],内部是for循环,if 条件语句可选
- 返回一个新的列表
-
列表解析式是一种语法糖
- 编译器会优化,不会因为简写而简写影响效率,反而因优化提高了效率
- 减少程序员工作量,减少出错
- 简化了代码,但可读性增强
生成器表达式
-
语法
- ( 返回值 for 元素 in 可迭代对象 if 条件 )
- 列表解析式的中括号换成小括号()就行了
- 返回一个生成器
-
和列表解析式的区别
-
生成器表达式是按需求计算(或称惰性求值、延迟计算),需要的时候才计算值
-
列表解析式是立即返回值
-
计算方式
- 生成器(延迟计算、返回迭代器、从前到后走完一遍,不能回头)
- 列表解析式(立即计算、返回的不是迭代器,返回可迭代对象列表,从前到后走完一遍后,可以重新回头迭代)
-
内存占用
- 单从返回值本身来说,生成器表达式省内存,列表解析式返回新的列表
- 生成器没有数据,内存占用极少,但是使用的时候,虽然一个个返回数据,但是合起来占用的内存也差不多
- 列表解析式构造新的列表需要占用内存
-
计算速度
- 单看计算时间,生成器表达式耗时非常短,列表解析式耗时长
- 但是生成器本身并没有返回任何值,只返回了一个生成器对象
- 列表解析式构造并返回了一个新的列表
-
生成器
- 可迭代对象
- 迭代器
-
生成器和迭代器是不同的对象,但是都是可迭代对象!!!
集合解析式类似列表解析式,使用花括号{}即可
字典解析式
- {返回值 for 元素 in 可迭代对象 if 条件}
- 列表解析式的中括号换成大括号{}即可
- 使用key.value形式
- 立即返回一个字典
网友评论