初步铺垫:
for i in [1,2,3,4]:
passl = [1,2,3,4]l2 = iter(l)
print(l2.__next__())
print(l2.__next__)print(range(100)) #range(100) 就是一个生成器,为了节省内存,值不会直接输出
print(range(0,100))
#两种range取值方法:
print(list(range(100))) #通过列表
for i in range(100): #通过for循环print(i)
print(list(range(1,100,2))) #步长
生成器变形计划:
一级变形:
def a():a = 0while True:# return ayield aa = a+1print(a().__next__())
print(a().__next__()) #全是0,每次重新执行那个函数,这个函数就会重新执行
二级变形:
def a():a = 0while True:# return ayield aa = a+1l = a()
print(l)
print(l.__next__()) #next可以递归的取值,是因为l始终指得是一个函数
print(l.__next__())
print(l.__next__())
三级变形:
def test2():# for i in range(1,6):# yield i #冻结yield 1yield 2yield 3yield 4yield 5l=test2()
print(l.__next__())
print(l.__next__())
print(l.__next__())
四级变形:(模拟range功能)
def range2():start = 0while start<10:yield start*4start += 1for i in range2():print(i)
五级变形:
def range2():start = 0l = []while start<100:l.append(start*4)start += 1return l
print(range2())
六级变形:
def range3():start = 0while True:yield start*4start += 1# print(range3())
for i in range3():print(i)
练习之变形计划
练习一:
"1+1+2+3+5..." #斐波那契数列
#初步:
def test(): a,b = 1,1while a<10:c = a + byield ca = bb = c
print(test())
l = test()
print(l.__next__())
print(l.__next__())
for i in l:print(i)#终极:
def test4():a = 1yield ab = 1yield bwhile True:c = a+byield ca = bb = cl = test4()
print(l.__next__())
print(l.__next__())
print(l.__next__())
print(l.__next__())
print(l.__next__())
# for i in l:
# print(i)
练习二:
母鸡下蛋例子
def test3():i = 0while i < 10:yield '母鸡下了个蛋,这是第%s个蛋'%(i+1)i += 1l = test3()print(l.__next__())
print(l.__next__())
print(l.__next__())
for i in l:print(i)