列表解析:
[expr for iter_var in iterable if cond_expr]
生成器表达式:
(expr for iter_var in iterable if cond_expr)
生成器最大的却别是它并不返回一个真正的数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
rows = [1,2,3,17] def cols(): yield 56 yield 2 yield 1 abc = cols() for i in abc: print i print rows print abc |
只有在调用的时候,才会真在的变成实实在在的值,所以它并不是把所有的值放到内存中,所以你只能循环一次
yield 则是这个神奇的东西,和return一样,他返回东西,但他返回的是一个生成器,而不是立即执行
直观一点就是,比如
你要求和,求一个很大很大的数组里边的所有的数组的和,然后内存不够大的化,你肯定求不了,因为[1,2.3,4……]太大了,内存放不开
但是如果你用生成器生成一个一样的数组,(1,2,3,….),你就可以了
1 2 3 |
rows = [x for x in range(10000000000)] rows = (x for x in range(10000000000)) |
(就是说明一下,代表100000000000很大)
因为生成器就是 生成一个,删掉一个,然后下一个,所有不用太占内存
Latest posts by Zhiming Zhang (see all)
- aws eks node 自动化扩展工具 Karpenter - 8月 10, 2022
- ReplicationController and ReplicaSet in Kubernetes - 12月 20, 2021
- public key fingerprint - 5月 27, 2021