生成器函数:一次只返回一个结果,对大数据处理非常有用。

遵循迭代器协议: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次

版权声明:本文为python1988原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/python1988/p/10346010.html