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来变为一个生成器。

原文地址:https://www.cnblogs.com/ch2020/p/12365576.html