zoukankan      html  css  js  c++  java
  • Python中yield解析

    小探yield

    查看 python yield 文档

    yield expressions:
    Using a yield expression in a function’s body causes that function to be a generator
    can only be used in the body of a function definition
    

    翻译成人话就是:
    使用yield表达式会将函数体变成生成器,而且只能在函数定义的主体中使用。

    迭代对象

    我一般使用的 for * in array(list, string,file) 。这些都是可迭代对象
    这样的方法 所有的数据都在内存中,如果数据量特别大的时候,会消耗大量的内存

    就像在python2常使用 for i in xrange(num) 来代替 for i in range(num)

    yield类似于return关键字,yield函数会生成一个generator。

    • 特点:迭代一次遇到yield时返回yield后面(右边)的值,下一次迭代时,从上一次迭代遇到的yield后面的代码(下一行)开始执行。

    生成器generator也是可以进行迭代,但是只能读取一次,它并不把所有的值都放在内存中,实时地生成数据。

    使用方法是重复调用next()方法,直至catch一个异常error

    yield运行

    一个实例

    >>> def createGenerator() :
    ...    mylist = range(3)
    ...    for i in mylist :
    ...        yield i*i
    ...
    >>> mygenerator = createGenerator() # create a generator
    >>> print(mygenerator) # mygenerator is an object!
    <generator object createGenerator at 0xb7555c34>
    >>> for i in mygenerator:
    ...     print(i)
    0
    1
    4
    

    当你调用这个函数的时候,函数内部的代码并不是立即执行。函数只返回一个生成器对象。当使用for进行迭代的时候,函数内部的代码执行。

    python yield 参考链接

    不要用狭隘的眼光看待不了解的事物,自己没有涉及到的领域不要急于否定. 每天学习一点,努力过好平凡的生活.
  • 相关阅读:
    mysql---面试题2
    Mysql--存储过程
    MySql--锁机制
    MYsql事务
    IDEA创建新项目保存pom文件时,出现错误Cannot resolve org.openjfx:javafx.base:11.0.0-SNAPSHOP
    线程中的多线程、并行和并发、同步和异步、阻塞和非阻塞、线程安全
    Java里的Arrays.asList()返回的List不能使用add、remove方法?
    服务器可用的Socket
    MessageBox.Show
    NPOI 教程
  • 原文地址:https://www.cnblogs.com/GeekDanny/p/10116274.html
Copyright © 2011-2022 走看看