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! ! !
  • 相关阅读:
    玲珑学院-ACM比赛1014
    扩展欧几里得算法
    中国剩余定理(孙子定理)及实现----原理详解
    搞懂树状数组
    HDU3792---Twin Prime Conjecture(树状数组)
    树状数组 模板
    HDU1541--Stars(树状数组)
    HDU4046--Panda(树状数组)
    CCF-201604-1-折点计数
    CCF-201604-2-俄罗斯方块
  • 原文地址:https://www.cnblogs.com/zbooo/p/8982859.html
Copyright © 2011-2022 走看看