zoukankan      html  css  js  c++  java
  • 生成器

    #一边循环,一边计算的机制,称为生成器generator。generator保存的是算法,可推算出列表中的某个元素值,可节省大量的存储空间
    #生成器:只有在调用的时候才会生成相应的数据。只记录当前位置。
    #只有一个__next__()方法
    #要把函数变成生成器,只需把print命令改为:yield命令即可
    #如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。
    #函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用__next__()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
    #生成器不能像普通的列表一样,通过下标或者切片的方式去取。生成器只能通过循环或者__next__()方法去取。

    #创建生成器方法一:

    generator1 = (i*2 for i in range(100)) #与列表很相似,只是把[]改成为()。如果在Pyton命令行执行,将返回内存地址
    for i in generator1:
    print(i)

    ###或者将for循环改用以下命令一个个的输出:
    print(generator1.__next__()) #读取第一个元素值
    print(generator1.__next__()) #读取第二个元素值
    print(generator1.__next__()) #只能往后读取,不能往前
    print(generator1.__next__()) #读取到最后一个值时,抛出StopIteration的错误。


    ###################################
    #创建生成器方法二:
    def odd():
    print("step 1")
    yield 1 #执行过程中,遇到yield执行后就中断。后面的数值为可选的返回值
    print("step 2")
    yield 3
    print("step 3")
    yield 5

    o = odd()
    o.__next__()
    o.__next__()
    o.__next__()
  • 相关阅读:
    关于 JAVA 中使用 Preferences 读写注册表时要注意的地方
    VS2010编译以前版本工程时 ERROR CVT1100:duplicate resource,type:MANIFEST解决办法
    在博客园安家了,同时献上刚汉化的 Code Snippet 插件!
    安装mariadb
    路飞学城部署方法
    配置supervisor工具
    使用uwsgi启动django项目
    nginx访问日志和压测命令
    nginx学习
    虚拟环境之virtualenvwrapper
  • 原文地址:https://www.cnblogs.com/hy007x/p/7727434.html
Copyright © 2011-2022 走看看