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次

posted @ 2019-02-01 15:29  小圣庄  阅读(193)  评论(0编辑  收藏  举报