参考教程:
测试代码:
import sys
#Pascal's Triangle
#lines start from 1
def pasTri(lines):
n=1
ls=[1]
while n<=lines:
nextls=[]
#i indicates the index of nextls
for i in range(n):
#start and the end
if i==0 or i==n-1:
nextls.append(1)
else:
nextls.append(ls[i-1]+ls[i])
ls=nextls
n+=1
yield ls
ps1=pasTri(10)
ps2=pasTri(100000)
#for i in ps:print(i)
print(sys.getsizeof(ps1),sys.getsizeof(ps2),
sys.getsizeof(list(range(10))),sys.getsizeof(list(range(100000))))
#88 88 200 900112
输出
88 88 200 900112
tips:生成器generator做到了以数据组织的规律(即自定义的数学表达式)来存储数据,尤其当计算量大时特点尤为显著。