1 #老男孩由于峰哥的强势加盟很快走上了上市之路,alex思来想去决定下几个鸡蛋来报答峰哥 2 3 egg_list=['鸡蛋%s' %i for i in range(10)] #列表解析 4 5 #峰哥瞅着alex下的一筐鸡蛋,捂住了鼻子,说了句:哥,你还是给我只母鸡吧,我自己回家下 6 7 laomuji=('鸡蛋%s' %i for i in range(10))#生成器表达式 8 print(laomuji) 9 print(next(laomuji)) #next本质就是调用__next__ 10 print(laomuji.__next__()) 11 print(next(laomuji))
总结:
1.把列表解析的[]换成()得到的就是生成器表达式
2.列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存
3.Python不但使用迭代器协议,让for循环变得更加通用。大部分内置函数,也是使用迭代器协议访问对象的。例如, sum函数是Python的内置函数,该函数使用迭代器协议访问对象,而生成器实现了迭代器协议,所以,我们可以直接这样计算一系列值的和:
1 sum(x ** 2 for x in xrange(4))
而不用多此一举的先构造一个列表:
1 sum([x ** 2 for x in xrange(4)])