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 '''
    世风之狡诈多端,到底忠厚人颠扑不破; 末俗以繁华相尚,终觉冷淡处趣味弥长。
  • 相关阅读:
    关于扩展欧几里得算法___基础,基础中的基础
    bzoj 2152聪聪可可
    poj1741 树上的点分治
    POJ1201 区间
    codevs 2756树上的路径
    zoj1260 king
    栈与队列应用:迷宫问题(DFS非最短路径)
    估值为一亿的AI核心代码
    栈与队列应用:计算前缀表达式的值
    栈与队列:循环队列算法+可执行代码
  • 原文地址:https://www.cnblogs.com/simple-li/p/9821025.html
Copyright © 2011-2022 走看看