• 迭代器与生成器


    迭代

    你可以创建一个列表,然后逐一遍历,这就是迭代

    mylist是可迭代的对象,当你使用列表解析时,你创建一个列表,即一个可迭代对象

    任何你可用 “for… in…” 处理的都是可迭代对象:列表,字符串,文件….
    这些迭代对象非常便捷,因为你可以尽可能多地获取你想要的东西

    但,当你有大量数据并把所有值放到内存时,这种处理方式可能不总是你想要的
    (but you store all the values in memory and it’s not always what you want when you have a lot of values.)

    生成器

    生成器是迭代器,但你只能遍历它一次(iterate over them once)
    因为生成器并没有将所有值放入内存中,而是实时地生成这些值

    这和使用列表解析地唯一区别在于使用()替代了原来的[]

    注意,你不能执行for i in mygenerator第二次,因为每个生成器只能被使用一次: 计算0,并不保留结果和状态,接着计算1,然后计算4,逐一生成

    yield

    yield是一个关键词,类似return, 不同之处在于,yield返回的是一个生成器

    这个例子并没有什么实际作用,仅说明当你知道你的函数将产生大量仅被读取一次的数据时,使用生成器将是十分有效的做法

    要掌握yield,你必须明白 – 当你调用这个函数,函数中你书写的代码并没有执行。这个函数仅仅返回一个生成器对象

    这有些狡猾 :-)

    然后,在每次for循环使用生成器时,都会执行你的代码

    然后,是比较困难的部分:

    第一次函数将会从头运行,直到遇到yield,然后将返回循环的首个值. 然后,每次调用,都会执行函数中的循环一次,返回下一个值,直到没有值可以返回

    当循环结束,或者不满足”if/else”条件,导致函数运行但不命中yield关键字,此时生成器被认为是空的

  • 相关阅读:
    dedecmsV5.7和discuz!X3.4整合之后免激活登陆
    dedecms织梦文章微信分享带缩略图与简介
    关于PHP的mkdir函数
    关于discuz的fap.php 漏洞问题
    discuzX3.4安装之后,没有任何样式怎么办?
    阿里云 RDS for MySQL支持什么引擎
    PHP随机生成要求位数个字符(大小写字母+数字)
    PHP json_decode为什么将json字符串转成数组是对象格式?
    PHP实用的功能函数
    css实现三角形图标
  • 原文地址:https://www.cnblogs.com/gczr/p/7089983.html
Copyright © 2020-2023  润新知