D18-07三元运算,列表解析,生成器
什么是生成器
可以理解为一种数据类型,这中数据类型自动实现了迭代器协议(其他的数据类型需要调用iter方法),所以生成器就是可迭代对象。
python有两种不用的方式提供生成器
1,生产器函数:常规函数定义,但是使用yield语句而不是return语句返回结果,yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从他们离开的地方继续执行。
2,生成器表达式:类似于列表推到,但是生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表。
生成器的优点
使用生成器对延迟的操作提供了支持,所谓延迟操作,是指在需要的时候才产生结果,而不是立即产生结果,这也是生成器的主要好处。
小结:
1,可迭代对象
2,实现了延迟计算,节省内存
3,生成器本质和其他的数据类型一样,都是实现了迭代器协议,只不过生成器附加了一个延迟计算内存的好处,其余的可迭代对象没有这个优势。
三元运算
name = 'liu' #如果判断name = liu 则返回shuaige res = 'shuaige' if name =='liu' else 'a' print(res) 打印结果: shuaige
egg_list=[]
for i in range(10):
egg_list.append('人造蛋%s'%i+'号')
print(egg_list)
#可以优化为以下三元运算
l = ['人造蛋%s'%i+'号' for i in range(10)]
l1 = ['人造蛋%s'%i+'号' for i in range(10) if i>6]
print(l)
print(l1)
打印结果
['人造蛋0号', '人造蛋1号', '人造蛋2号', '人造蛋3号', '人造蛋4号', '人造蛋5号', '人造蛋6号', '人造蛋7号', '人造蛋8号', '人造蛋9号']
['人造蛋0号', '人造蛋1号', '人造蛋2号', '人造蛋3号', '人造蛋4号', '人造蛋5号', '人造蛋6号', '人造蛋7号', '人造蛋8号', '人造蛋9号']
['人造蛋7号', '人造蛋8号', '人造蛋9号']
#生成器表达式 laomuji = ('人造蛋%s'%i+'号' for i in range(3)) #生成器表达式 圆括号 print(laomuji) print(laomuji.__next__()) print(laomuji.__next__()) print(laomuji.__next__()) 输出结果 人造蛋0号 人造蛋1号 人造蛋2号
总结:
1、把列表解析的[]换乘()即为生成器表达式
2、列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存。
3、python不但使用迭代器协议让for循环变得更加通用,大部分内置函数也是使用迭代器协议访问对象的,例如sum函数式py的内置函数,该函数使用迭代器协议访问对象,而生成器实现了迭代器协议,所以我们可以直接这样计算一系列值的和
print(sum(list(range(100)))) 求和计算

浙公网安备 33010602011771号