zoukankan      html  css  js  c++  java
  • 初识python: 生成器

    生成器定义理解,直接上代码:

    #!/user/bin env python
    # author:Simple-Sir
    # time:20181005
    # 生成器
    '''
    # 列表生成式
    a=[i for i in range(10)]
    print(a)
    
    def fun_add(a,b):
        return a+b
    b = [fun_add(i,j) for i in range(1,4) for j in range(4,7)]
    print(b)
    '''
    
    '''
    生成器: 一边循环一边计算的机制,就叫生成器generator
    循环一次,计算一次,不需要先循环完再计算。
    生成器只有在调用时才会生成相应的数据,
    只记录当前位置的值
    只有一个__next__方法 :获取下一个位置的值
    '''
    '''
    # 生成器方式一:列表生成式
    a = (i*2 for i in range(10))
    print(a.__next__())
    '''
    
    '''
    # 生成器方式二:函数做生成器
    # 斐波拉契数列,除了第一个和第二个外,任意一个数都由前两数相加得到。
    def fblq(max):
        n,a,b=0,0,1
        # n=0
        # a=0
        # b=1
        while n<max:
            # print(b)
            yield b # 将函数变成生成器,想要返回的值加yield,yield是一个类似return 的关键字
            a,b = b,a+b
            # 相当于 ==>
            # t = (b,a+b) -->(1,0+1)
            # a=t[0] -->1
            # b=t[1] -->0+1
            # 而不是 a=b,b=a+b
            n += 1
        return '执行完成' #异常消息
    f = fblq(10)
    print('打印第一个位置值',f.__next__())
    print('打印下一个位置值',f.__next__())
    print('打印下一个位置值',f.__next__())
    print('开始循环打印')
    '''
    
    '''
    # 循环打印
    for i in f:
        print(i)
    '''
    
    '''
    g = fblq(3)
    while True:
        try:
            x=next(g)
            print('g',x)
        except StopIteration as e:
            print('错误信息',e.value)
            break
    '''
    
    '''
    def scq_f():
        for i in range(5):
            for j in range(5):
                k=i+j
                #print(k)
                yield k #关键点,将函数变成生成器,即将函数保持中断状态
        return '错误信息'
    # f = scq_f()
    # for i in f:
    #     print(i)
    f=scq_f()
    
    while True:
        try:
            x=next(f)  # 即:f.__next__()
            print('f',x)
        except StopIteration as e:
            print('错误信息:',e.value) #获取scq_f的return值
    break '''
    世风之狡诈多端,到底忠厚人颠扑不破; 末俗以繁华相尚,终觉冷淡处趣味弥长。
  • 相关阅读:
    ZJOI2019二轮游记
    Luogu P5284 [十二省联考2019]字符串问题
    Luogu P5309 [Ynoi2012]D1T1
    Luogu P5292 [HNOI2019]校园旅行
    LOJ #6052. 「雅礼集训 2017 Day11」DIV
    Luogu P5279 [ZJOI2019]麻将
    LOJ #6060. 「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set
    Luogu P5283 [十二省联考2019]异或粽子
    Luogu P5290 [十二省联考2019]春节十二响
    Luogu P5285 [十二省联考2019]骗分过样例
  • 原文地址:https://www.cnblogs.com/simple-li/p/9821025.html
Copyright © 2011-2022 走看看