〖Python〗-- 迭代器与生成器补充

python

【迭代器与生成器补充】

初步铺垫:

1

2

3

4

5

6

7

8

9

10

11

python keyword">for in [1,2,3,4]:

pass

 

= [1,2,3,4]

 

l2 = iter(l)

print(l2.__next__())

print(l2.__next__)

 

print(range(100)) #range(100) 就是一个生成器,为了节省内存,值不会直接输出

print(range(0,100))

#两种range取值方法:

1

2

3

4

print(list(range(100))) #通过列表

for in range(100): #通过for循环

    print(i)

print(list(range(1,100,2))) #步长

生成器变形计划:

一级变形:

1

2

3

4

5

6

7

8

9

def a():

    = 0

    while True:

        # return a

        yield a

        = a+1

 

print(a().__next__())

print(a().__next__())  #全是0,每次重新执行那个函数,这个函数就会重新执行

二级变形:

1

2

3

4

5

6

7

8

9

10

11

12

def a():

    = 0

    while True:

        # return a

        yield a

        = a+1

 

= a()

print(l)

print(l.__next__()) #next可以递归的取值,是因为l始终指得是一个函数

print(l.__next__())

print(l.__next__())

三级变形:

1

2

3

4

5

6

7

8

9

10

11

12

13

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功能)

1

2

3

4

5

6

7

8

def range2():

    start = 0

    while start<10:

        yield start*4

        start += 1

 

for in range2():

    print(i)

五级变形:

1

2

3

4

5

6

7

8

def range2():

    start = 0

    = []

    while start<100:

        l.append(start*4)

        start += 1

    return l

print(range2())

六级变形:

1

2

3

4

5

6

7

8

9

def range3():

    start = 0

    while True:

        yield start*4

        start += 1

 

# print(range3())

for in range3():

    print(i)

练习变形计划

练习一:

"1+1+2+3+5..." #斐波那契数列

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

#初步:

def test():

    a,b = 1,1

    while a<10:

        = + b

        yield c

        = b

        = c

print(test())

= test()

print(l.__next__())

print(l.__next__())

for in l:

    print(i)

 

 

#终极:

def test4():

    = 1

    yield a

    = 1

    yield b

    while True:

        = a+b

        yield c

        = b

        = c

 

= test4()

print(l.__next__())

print(l.__next__())

print(l.__next__())

print(l.__next__())

print(l.__next__())

# for i in l:

#     print(i)

练习二:

母鸡下蛋例子

1

2

3

4

5

6

7

8

9

10

11

12

13

def test3():

    = 0

    while i < 10:

        yield '母鸡下了个蛋,这是第%s个蛋'%(i+1)

        += 1

 

= test3()

 

print(l.__next__())

print(l.__next__())

print(l.__next__())

for in l:

    print(i)

 

以上是 〖Python〗-- 迭代器与生成器补充 的全部内容, 来源链接: utcz.com/z/388332.html

回到顶部