解析式
其目的主要用来减少编程行数,并减少栈帧从而达到代码优化的效果
In [6]: [i ** 2 for i in range(11)]
Out[6]: [0, 1, 4, 9, 16, 25,...,从而达到优化效果
例:对i进行取模
In [23]: [ i for i in range(1,10) if i % 2 == 0]
Out[23]: [2, 4, 6, 8]
解析式中不能使用else...format(j,i,i*j,'\n' ifi == j else ''),end = "") for i in range(1,10) for j in range(1,i+1)]
生成器表达式
与解析式一样...立即生成和延后计算,可以嵌套在列表解析式中从返回值来讲,更节省内存,生成器则全部生成并返回
生成器没有数据,占用内存极少,使用的时候逐个返回
列表需要占用更多的内存
计算速度
生成器耗时间非常短,列表解析消耗时间略长...(x for x in range(500))
741 ns± 7.58 ns perloop (mean ± std. dev. of 7 runs, 1000000 loops each)
集合解析式