zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Linux 安装apache2时候遇到的问题
    ubuntu安装php时出现error: xml2config not found. Please check your libxml2 installation 的解决办法
    Linux一块网卡绑定2个IP地址
    php 满足条件后跳转的几种方法.
    Linux 安装php 遇到 libtool: link: `ext/date/php_date.lo' is not a valid libtool object
    js 光标移动到输入框最后位置函数
    Linux iptables 防火墙相关命令介绍及使用
    tcpdump的简单选项介绍
    子网掩码转换函数
    Linux 十六进制转换十进制的函数
  • 原文地址:https://www.cnblogs.com/zjltt/p/6913311.html
Copyright © 2011-2022 走看看