叠代器和生成器補充
阿新 • • 發佈:2017-05-12
while nbsp clas 終極 就會 class 列表 cnblogs app
初步鋪墊:
for i in [1,2,3,4]: pass l = [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 = 0 while True: # return a yield a a = a+1 print(a().__next__()) print(a().__next__()) #全是0,每次重新執行那個函數,這個函數就會重新執行
二級變形:
def a(): a = 0 while True: # return a yield a a = a+1 l = 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 1 yield 2 yield 3 yield 4 yield 5 l=test2() print(l.__next__()) print(l.__next__()) print(l.__next__())
四級變形:(模擬range功能)
def range2(): start = 0 while start<10: yield start*4 start += 1 for i in range2(): print(i)
五級變形:
def range2(): start = 0 l = [] while start<100: l.append(start*4) start += 1 return l print(range2())
六級變形:
def range3(): start = 0 while True: yield start*4 start += 1 # print(range3()) for i in range3(): print(i)
練習之變形計劃
練習一:
"1+1+2+3+5..." #斐波那契數列
#初步: def test(): a,b = 1,1 while a<10: c = a + b yield c a = b b = c print(test()) l = test() print(l.__next__()) print(l.__next__()) for i in l: print(i) #終極: def test4(): a = 1 yield a b = 1 yield b while True: c = a+b yield c a = b b = c l = 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 = 0 while i < 10: yield ‘母雞下了個蛋,這是第%s個蛋‘%(i+1) i += 1 l = test3() print(l.__next__()) print(l.__next__()) print(l.__next__()) for i in l: print(i)
叠代器和生成器補充