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 @   小圣庄  阅读(194)  评论(0编辑  收藏  举报
编辑推荐:
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 继承的思维:从思维模式到架构设计的深度解析
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
阅读排行:
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 当职场成战场:降职、阴谋与一场硬碰硬的抗争
· ShadowSql之.net sql拼写神器
· Excel百万数据如何快速导入?
· 无需WebView,Vue也能开发跨平台桌面应用
点击右上角即可分享
微信分享提示