1. 程式人生 > >叠代器和生成器復習

叠代器和生成器復習

例子 pass style code true 循環 class 初步 pen

初步鋪墊:

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)

叠代器和生成器復習