()
小括号用来生成生成器
把列表推导式的[]
换成()
就是生成器表达式
1
2
3
4
5 g = (i for i in range(10))
print(g)
<generator object <genexpr> at 0x000001719E5E3EB8>
用生成器表达式,可以用来造一个无限个值的数据
1
2
3
4
5
6
7
8
9
10
11 g = (i for i in range(10))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
0
1
2
3
生一筐鸡蛋变成给你一只老母鸡,用的时候就下蛋,这也是生成器的特性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 chicken = ('鸡蛋%s' % i for i in range(5))
print(chicken)
<generator object <genexpr> at 0x10143f200>
#############################################################################################
chicken = ('鸡蛋%s' % i for i in range(10))
print(next(chicken))
print(next(chicken))
print(next(chicken))
print(next(chicken))
鸡蛋0
鸡蛋1
鸡蛋2
鸡蛋3
#############################################################################################
chicken = ('鸡蛋%s' % i for i in range(5))
print(list(chicken)) # 因 chicken 可迭代,因而可以转成列表
['鸡蛋0', '鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4']
优点:省内存,一次只产生一个值在内存中
1 |
chicken = ('egg%s' % for i in range(3)) |
小练习
求文件 a.txt 中最长的行的长度(长度按字符个数算,需要使用 max 函数)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 # 获取文件内每一行的字符长度
with open('a.txt', 'r', encoding='utf-8') as f:
nums = [len(line) for line in f]
print(nums)
[2, 3, 4, 5, 66, 54, 54, 54, 54, 53]
#############################################################################################
# 获取最长那一行的长度
with open('a.txt', 'r', encoding='utf-8') as f:
nums = [len(line) for line in f] # 这里用列表生成器会有问题,如果文件内容非常多,这个列表会变得非常大,我们可以换成生成器表达式
print(max(nums))
66
#############################################################################################
# 获取最长那一行的长度
with open('a.txt', 'r', encoding='utf-8') as f:
nums = (len(line) for line in f)
print(nums)
<generator object <genexpr> at 0x00000153AFF855C8>
#############################################################################################
with open('a.txt', 'r', encoding='utf-8') as f:
nums = (len(line) for line in f)
print(max(nums))
66
近期评论