一、列表生成式:
按一定规律生成的列表代码,代码如下:
>>> a = [i+1 for i in range(10)]
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
相当于:
>>>a = []
>>>for i in range(10)
a.append(i+1)
>>>a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
作用:使代码更简洁。
二、生成器:
1、列表元素可以按照某种算法推算出来,一边循环一边计算的机制,不必创建完整的list,从而节省大量的空间,称为生成器:generator
2、方法一、把一个列表生成式的[]改成(),就创建了一个generator
>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81...............##是一个列表
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>.........##是一个生成器
方法二、 函数带yield 语名也是一个生成器。
3、 使用next(g)或for循环方法去输出生成器内容,通常都是用for循环。
next():一次输出一个元素,没有更多的元素时,抛出StopIteration的错误。
for循环:一次输出所有的元素,没有StopIteration的错误中的return 返回值。
4、作用:提高程序运行效率
三、迭代器:
迭代对象和迭代器:
1、凡是可作用于for循环的对象都是Iterable(迭代对象)类型。(一类是集合数据类型,如list、tuple、dict、set、str等,一类是generator,包括生成器和带yield的generator function)
isinstance()判断一个对象是否是Iterable对象
2、凡是可作用于next()函数的对象都是Iterator(迭代器对象)类型,可以使用isinstance()判断一个对象是否是Iterator对象。
3、集合数据类型如list、dict、str等是Iterable但不是Iterator,可以通过iter()函数使它成为一个Iterator对象。
功能:多任务并行运行,提高程序运行效率(吃包子代码)