generator
列表生成式,如果list太大会占内存,生成器是一种 推算算法,不会占内存,
把列表生成式的 [] 变成 () 就是生成器,
g = (x * x for x in range(10))
generator 生成器 也可迭代
for n in g:
print(n)
如果推算算法太复杂,可以用函数来实现
斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到
def fib(max):
n, a, b = 0, 0, 1
while n < max:
print(b)
a, b = b, a + b
n = n + 1
把print 改成
yield 即可,
generator的函数,在每次调用
next()
的时候执行,遇到yield
语句返回,再次执行时从上次返回的yield
语句处继续执行。
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
不必显式写出临时变量 t 就可以赋值。
a, b = b, a+b
#等于
t = a
a = b
b = t+b
练习
实现杨辉三角
def triangles():
count = 0
list = []
while count < 10:
count = count + 1;
if count == 1:
list = [1]
elif count == 2:
list = [1,1]
else:
tmp = [1]
for i in range(count-2):
result = list[i] + list[i+1]
tmp.append(result)
tmp.append(1)
list = tmp
yield list