列表生成式、生成器、迭代器
一句话概念
列表生成式——可以直接在列表里进行运算
生成器——一边循环一边计算的机制,称为生成器:generator(就是生成一个不运行的函数或者列表,即数据流)
第二句:生成器与列表的区别——生成器你不知道长度,就是一个数据流;list、dict、str你知道长度
迭代器——可以被next()函数调用并不断返回下一个值的对象称为迭代器
第二句:可迭代对象——可以直接作用于for循环的对象统称为可迭代对象:Iterable
第三句:生成器一定是迭代器,迭代器不一定是生成器
列表生成式
data = [1,2,2,34] data = [i*2 for i in data] #直接运算 data = [i*2 if i>3 else i-1 for i in data ] #三元运算 print(data)
生成器
第一种方法,列表推到式
data = (x for x in range(10)) #用小括号表示 print(data) #此时只打印函数内存,
第二种复杂式方式
#斐波那契数列
def fob(num):
    a,b = 0,1
    count = 0
    while count < num:
        count += 1
        tmp = b     #也可以写成a,b=b,a+b
        b = a + b
        a = tmp
        yield a     #返回a, 同时挂起当前这个函数, a返回给了通过__next__()调用当前函数的人
        # return a
    else:print("done")
f = fob(1000000)
for i in range(10):
    print(f.__next__())
迭代器
>>> from collections import Iterator
>>> isinstance((x for x in range(10)), Iterator)
True
>>> isinstance([], Iterator)
False
>>> isinstance({}, Iterator)
False
>>> isinstance('abc', Iterator)
False
#list、dict、str虽然是Iterable,却不是Iterator。通过iter()函数,可以把list、dict、str等Iterable变成Iterator使用
>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号