• 第十五天学习:函数(三)


    列表生成式
    In [1]: [i*i for i in range(10) if i%2 == 0 ]
    Out[1]: [0, 4, 16, 36, 64]
     
    生成器
    第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator
    In [20]: g = (i*i for i in range(10) if i%2 == 0)
    In [21]: g
    Out[21]: <generator object <genexpr> at 0x8cf4fa4>
     
    如果要一个一个打印出来,可以通过generator的next()方法
    generator保存的是算法,每次调用next(),就计算出下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。
    使用for:
    In [32]: for i in g:
    ....: print i
    ....:
    0
    4
    16
    36
    64
     
    第二种:如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator
    >>> def odd(): ... print 'step 1' ... yield 1 ... print 'step 2' ... yield 3 ... print 'step 3' ... yield 5 ... >>> o = odd() >>> o.next() step 1 1 >>> o.next() step 2 3 >>> o.next() step 3 5 >>> o.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
    可以看到,odd不是普通函数,而是generator,在执行过程中,遇到yield就中断,下次又继续执行。执行3次yield后,已经没有yield可以执行了,所以,第4次调用next()就报错。
     
    生成式:一次性生成所有的数据,然后保存在内存中,适合小量的数据
    生成器:返回一个可迭代的对象,可通过next调用返回下一个值 ,通过循环列出所有的结果
     
    参考:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138681965108490cb4c13182e472f8d87830f13be6e88000
  • 相关阅读:
    javaIO流--Writer,Reader
    javaIO操作之字节输入流--InputStream
    javaIO操作之字节输出流--OutputStream
    java中IO操作
    java中的方法引用
    java中lamda表达式的应用
    java8接口定义增强
    java中的强大的枚举(基本没人用)
    java中的泛型
    详述 IntelliJ IDEA 远程调试 Tomcat 的方法
  • 原文地址:https://www.cnblogs.com/yshan13/p/7781871.html
Copyright © 2020-2023  润新知