zoukankan      html  css  js  c++  java
  • 生成器

    一.列表生成式

    a=[x**2 for x in range(10)]
    print(a)
    #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

    def f(i):
    return i*5
    a=[f(x) for x in range(10)]
    print(a)
    #[0, 5, 10, 15, 20, 25, 30, 35, 40, 45]
    二.生成器
    #生成器:是一个可迭代对象(内部有_iter_方法),内存中不存在数据
    b=(x**2 for x in range(10))
    for i in b:
    print(i,'',end='')
    # 0 1 4 9 16 25 36 49 64 81
    #*******************************************************
    # 生成器两种创建方式
    # 1. b=(x**2 for x in range(10))
    # 2. yield
    def foo():
    print('ok','',end='')
    yield 1
    print('ko','',end='')
    yield 2
    a=foo()
    next(a)#返回1但没被打印
    next(a)#返回2但没被打印
    #ok ko
    for i in a:#for循环含有next
    print(i,'',end='')
    #ok 1 ko 2
    #*********************************************************
    #裴波那契数列
    def fib(max):
    n,before,after=0,0,1
    while n<max:
    # print(after,'',end='')
    yield after
    before,after = after,before+after
    n+=1
    g=fib(10)
    print(g)#<generator object fib at 0x0000000001E97410>
    print(next(g),'',end='')
    print(next(g),'',end='')
    print(next(g),'',end='')
    print(next(g),'',end='')
    print(next(g),'',end='')
    #1 1 2 3 5
    #***********************************************************
    def fo():
    print('ok','',end='')
    m=yield 1
    print(m,'',end='')
    print('ko','',end='')
    yield 2
    v=fo()
    v.send(None)#=next(a) 如果seed前没有next则参数只能传None 因为第一次找不到对应的yield而去传值
    y2=v.send('bbb')#改变m(找到对应的yield)的值
    print(y2)
    #ok bbb ko 2
     
    go go go! ! !
  • 相关阅读:
    [恢]hdu 1548
    [恢]hdu 2102
    [恢]hdu 1238
    [恢]hdu 2564
    [恢]hdu 2565
    关于mmu,bootloader,dta以及各种乱七八糟
    总有那些让人XX的词语
    VS2005+SQL2005 Reporting Service动态绑定报表(Web)
    (已测试)在本地处理模式下将数据库数据源与 ReportViewer Web 服务器控件一起使用
    如何在单台计算机上安装 Reporting Services
  • 原文地址:https://www.cnblogs.com/zbooo/p/8982859.html
Copyright © 2011-2022 走看看