python-迭代器与生成器1

python-迭代器与生成器1

迭代器与生成器
列表的定义
列表生成式:作用使代码更加简洁
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。
而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面
几个元素,那后面绝大多数元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续
的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边
计算的机制,称为生成器:generator。

a=[1,2,3]
print(a)
a=[i*2 for i in range(10)] #也可以是传一个函数[fun for i rang(10)]
print(a)

#其他方式来完成:
a=[]
for i in range(10):
    a.append(i*2)
print(a)



打印结果
[1, 2, 3]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]


生成器:只有在调用时才会生成相应的数据,调用哪次就参生哪次。
只记录当前位置
只有一个方法_next_();2.7版本用netx();
(i*i for in in range(10))

例1:斐波那契
def fib(max):
    n,a,b=0,0,1
    while n<max:
        print(b)
        a,b=b,a+b
        n=n+1
    return "----done______"
fib(10)

打印结果
------------------
1
1
2
3
5
8
13
21
34
55

例2  斐波那契
def fib(max):
    n,a,b=0,0,1
    while n<max:
        print(b)
        #yield b
        a,b=b,a+b     #t=(b,a+b) 是一个tuple
        n=n+1
    return "----done______"
fib(10)
打印结果
------------------
1
1
2
3
5
8
13
21
34
55


例3:生成器
def fib(max):
    n,a,b=0,0,1
    while n<max:
        #print(b)
        yield b
        a,b=b,a+b     #t=(b,a+b) 是一个tuple
        n=n+1
    return "----done______"
#print(fib(10))
f=fib(10)
print(f.__next__())
print(f.__next__())

打印结果
------------------
1
1



例4:

def fib(max):
    n,a,b=0,0,1
    while n<max:
        #print(b)
        yield b
        a,b=b,a+b     #t=(b,a+b) 是一个tuple
        n=n+1
    return "----done______"
#print(fib(10))
f=fib(10)
print(f.__next__())
print(f.__next__())
print("=======”"开始 ")


打印结果
--------------
1
1
=======开始 
2
3
5
8
13
21
34
55

 

posted @ 2019-12-10 21:52  科子  阅读(233)  评论(0编辑  收藏  举报