• pythoy-生成器


    生成器:只有在调用的时候才会生成相应的数据(调用到这个数据的时候才会生成这个数据,没有调用到时就没有这个数据)
    只记录数据的当前位置

    生成器不能像普通的列表一样,通过下标或者切片的方式去取
    生成器只能通过 循环 或者__next__()(2.x中用next())方法去取。
    """

    # 创建生成器

    """
    # 方法一:
    generator1 = ( i*i for i in range(10) )
    for i in generator1:
    print(i)
    """


    # 生成一个列表,保存一个计算20次的斐波那契数列:
    # 斐波那契数列:除第一个和第二个数外,任意一个数都可由前两个数相加得到。

    """
    # 普通的方法,用一个函数实现:
    def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
    print(b)
    a, b = b, a + b # 注意,赋值语句a, b = b, a + b
    # 相当于:
    # t = (b, a + b) #t是一个tuple(元组)
    # a = t[0]
    # b = t[1]
    n += 1
    return 'done'
    fib(20)
    """

    # 方法二:
    # 使用生成器,来生成一个斐波那契数列:
    def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
    yield b # 注意这里的区别
    a, b = b, a + b # 注意,赋值语句a, b = b, a + b
    # 相当于:
    # t = (b, a + b) #t是一个tuple(元组)
    # a = t[0]
    # b = t[1]
    n += 1
    # 这个函数因为使用了yield,它便不能再称之为函数,而应该称之为生成器
    # 而这里的return的返回值,值返回给一个异常状态下的值
    # 比如这里当所有数据都生成完成后,没有数据了,会返回这么一个异常:StopIteration: done,这个done是可以自定义的,就是通过下面的这个return
    return 'done'
    fib_generator = fib(20)
    print(fib_generator)
    print(fib_generator.__next__())
    print(fib_generator.__next__())
    print(fib_generator.__next__())
    print(fib_generator.__next__())
    print(fib_generator.__next__())
    print(fib_generator.__next__())
    print(fib_generator.__next__())
    print('start fib_generator:')
    #for i in fib_generator: # 注意:前面因为已经使用next方法,取过几个数据了,所以这里直接从最后一次取值的地方开始循环
    # print(i)
    while True:
    try:
    fib_value = fib_generator.__next__()
    print("fib_value: %s" % fib_value)
    except StopIteration as fibs:
    print("Generator return value: %s " % fibs.value)
    break
  • 相关阅读:
    2016.04.18 view中嵌套两个居中的 lable
    2016..4.06 点菜系统案例:利用文本框的inputView和inputAccessoryView串联UIPickerView、UIDateP...
    2016.04.06 UITabBar+badge.h
    2014 .04 .06 navbar
    2016-03-17 leaks 内存泄露
    2016-03-16 sdwebimage
    2016-03-16 字符串的包含
    2016-03-16 键盘的弹出与收起
    2016-03-15 nsfoundation 数组 字典 nsrange等
    2016-03-15 uitextview placehold
  • 原文地址:https://www.cnblogs.com/zjltt/p/6913311.html
Copyright © 2020-2023  润新知