2019年2月1日 生成器总结
生成器函数:一次只返回一个结果,对大数据处理非常有用。
遵循迭代器协议:for,sum,map,reduce,filter
text='happy' for index , letter in enumerate(text,start=1): print(index,letter)
>>
1 h
2 a
3 p
4 p
5 y
# 求一段文字中,每个单词出现的位置 def f_w(text): result=[] if text: result.append(0) for index,letter in enumerate(text,start=1): if letter == ' ': result.append(index) return result print(f_w('dont worry be happy')) #______++++++++++++__________ def test(text): if text!='':#也可以写成 if text: yield 0 for index , letter in enumerate(text,start=1): if letter == ' ': yield index
>>
[0, 5, 11, 14]
<generator object test at 0x100755cf0>
0
5
11
14
l=["a" for i in range(10)]#列表解析 print(l) res=True if 3>5 else False#三元表达式 print(res) m=('a' for i in range(10))#变成生成器表达式,只要列表解析改中括号 print(m)
》》
['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a']
False
<generator object <genexpr> at 0x102055d68>
def test(): for i in range(4): yield i t=test() print(t.__next__()) t1=(i for i in t)#生成器表达式 print(t1.__next__()) print(list(t1))
>>
0
1
[2, 3]
def test(): for i in range(4): yield i t=test() t1=(i for i in t) t2=(i for i in t1) print(list(t1)) print(list(t2))#t1,t2内部都没有值,而且只能遍历1次
》》
[0, 1, 2, 3]
[def test(): for i in range(4):
yield i t=test() t1=(i for i in t) t2=(i for i in t1) # print(list(t1)) 如果不运行list(t1)那么t2就能运行出值了
print(list(t2))#t1,t2内部都没有值,而且只能遍历1次
》》[0, 1, 2, 3]
vip: 生成器只能遍历1次