• python3--生成器


    # Auther: Aaron Fan

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

    生成器不能像普通的列表一样,通过下标或者切片的方式去取
    生成器只能通过 循环 或者__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
  • 相关阅读:
    JavaScript设计模式与开发实践——读书笔记1.高阶函数(下)
    JavaScript设计模式与开发实践——读书笔记1.高阶函数(上)
    js 去除字符串中的空格
    js 运算符 || && 妙用
    判断一个js对象是不是数组
    Javascript中的异步
    js异步处理工作机制(setTimeout, setInterval)
    移动端html页面优化
    编写高效的jQuery代码
    JavaScript学习笔记 isPrototypeOf和hasOwnProperty使用区别
  • 原文地址:https://www.cnblogs.com/AaronFan/p/6161157.html
Copyright © 2020-2023  润新知