python迭代器和生成器
列表解析 例如:
1 egg2 = ['鸡蛋%s' % n for n in range(10)] 2 print(egg2) 3 输出: 4 ['鸡蛋0', '鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4', '鸡蛋5', '鸡蛋6', '鸡蛋7', '鸡蛋8', '鸡蛋9']
列表解析可以增加三元 ;例如:
1 egg2 = ['鸡蛋%s' % n for n in range(10)] 2 egg3 = ['鸡蛋%s' % n for n in range(10) if n > 5] 3 print(egg2) 4 print(egg3) 5 输出: 6 ['鸡蛋0', '鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4', '鸡蛋5', '鸡蛋6', '鸡蛋7', '鸡蛋8', '鸡蛋9'] 7 ['鸡蛋6', '鸡蛋7', '鸡蛋8', '鸡蛋9']
总结列表解析中,列表左边的是for循环最后的一个变量。只有三元没有四元。不能更改
变为生成器 例如:以下为生成器表达式
1 egg_list = ('鸡蛋%s'% i for i in range(10)) 2 print(egg_list) 3 print(egg_list.__next__()) 4 print(egg_list.__next__()) 5 print(egg_list.__next__()) 6 print(egg_list.__next__()) 7 print(egg_list.__next__()) 8 print(egg_list.__next__()) 9 输出: 10 鸡蛋0 11 鸡蛋1 12 鸡蛋2 13 鸡蛋3 14 鸡蛋4 15 鸡蛋5
用小括号就变成一个生成器:例如
1 def test(): 2 yield 1 3 yield 2 4 yield 3 5 yield 4 6 v = test() 7 print(v) 8 print(v.__next__()) 9 print(v.__next__()) 10 print(v.__next__()) 11 print(v.__next__()) 12 输出: 13 <generator object test at 0x7fc0ea030468> 14 1 15 2 16 3 17 4
以上为生成器函数。 可以得知函数可以用yield来变为一个生成器。