iterables

# 当你创建了一个列表,你可以一个一个的读取它的每一项,这叫做iteration:
>>> mylist = [1,2,3]
>>> for i in mylist:
print(i)
>>> 1
>>> 2
>>> 3
# mylist是可迭代的。当你用列表推导式的时候,你就创建了一个列表,而这个列表也是可迭代的
>>> mylist = [x*x for x in range(3)]
>>> for i in mylist:
print(i)
>>> 0
>>> 1
>>> 4
所有你可以用在for...in...语句中的都是可迭代的:比如lists,strings,files...因为这些
可迭代的对象你可以随意的读取所以非常方便易用,但是你必须把它们的值放到内存里,当它们
有很多值时就会消耗太多的内存。这里最后一句话是重点。

generators

生成器也是迭代器的一种,但是你只能迭代它们一次,原因很简单,因为它们不是全部存在内存里,
它们只在要调用的时候在内存里生成:
>>> mygenerator = (x*x for x in range(3))
>>> for i in mygenerator:
print(i)
>>> 0
>>> 1
>>> 4
生成器和迭代器的区别就是()代替[],还有你不能用for i in mygenerator第二次调用生成器:

yield

// yield的用法和关键字return差不多,下面的函数将会返回一个生成器
>>> def createGenerator():
mylist = range(3)
for i in mylist:
yield i*i
>>> mygenerator = createGenerator() # 创建生成器
>>> print(mygenerator) # mygenerator is an object
>>> for i in mygenerator:
print(i)
>>> 0
>>> 1
>>> 4
当你的函数要返回一个非常大的集合并且你希望只读一次的话,那么它就非常的方便了
要理解Yield你必须先理解当你调用函数的时候,函数里的代码并没有运行。函数仅仅
返回生成器对象,这就是它的最微妙之处。
然后,没当for语句迭代生成器的时候你的代码才会运转。
当for语句第一次调用函数里返回的生成器对象,函数的代码就开始运作,直到碰到yield
然后会返回本次循环的第一个返回值,所以下一次调用也将运行一次循环然后返回下一个值
直到没有值可以返回
一旦函数运行并且没有碰到yield语句就认为生成器已经为空了。因为有可能是循环结束
或者没有满足if/else之类的。

iterables/generators/yield的更多相关文章

  1. JS实现异步的方法:回调函数callback、事件监听、setTimeout、Promise、生成器Generators/yield、async/awt

    所有异步任务都是在同步任务执行结束之后,从任务队列中依次取出执行. 回调函数是异步操作最基本的方法,比如AJAX回调,回调函数的优点是简单.容易理解和实现,缺点是不利于代码的阅读和维护,各个部分之间高 ...

  2. Typescript 查缺补漏

    Types Casting: let input = xxx as HTMLInputElement; let input = <HTMLElement>xxxx; Object Shap ...

  3. [译]Node.js面试问与答

    原文: http://blog.risingstack.com/node-js-interview-questions/ 什么是error-first callback? 如何避免无休止的callba ...

  4. php 新特性

    PHP 5.6 1.可以使用表达式定义常量 https://php.net/manual/zh/migration56.new-features.php 在之前的 PHP 版本中,必须使用静态值来定义 ...

  5. Python中itertools模块

    itertools模块包含创建有效迭代器的函数,可以用各种方式对数据进行循环操作,此模块中的所有函数返回的迭代器都可以与for循环语句以及其他包含迭代器(如生成器和生成器表达式)的函数联合使用. ch ...

  6. Python:itertools模块

    itertools模块包含创建有效迭代器的函数,可以用各种方式对数据进行循环操作,此模块中的所有函数返回的迭代器都可以与for循环语句以及其他包含迭代器(如生成器和生成器表达式)的函数联合使用. ch ...

  7. JavaScript Application Architecture On The Road To 2015

    JavaScript Application Architecture On The Road To 2015 I once told someone I was an architect. It’s ...

  8. Node.js最新技术栈之Promise篇

    前言 大家好,我是桑世龙,github和cnodejs上的i5ting,目前在天津创业,公司目前使用技术主要是nodejs,算所谓的MEAN(mongodb + express + angular + ...

  9. 一名全栈工程师Node.js之路-转

    Node.js 全球现状 虽然 Node.js 在国内没有盛行,但据 StackOverflow 2016 年开发者调查,其中 node.js .全栈.JavaScript 相关的技术在多个领域(包括 ...

  10. pythoon_interview_redit

    easy/intermediate What are Python decorators and how would you use them?How would you setup many pro ...

随机推荐

  1. [转帖]实战瓶颈定位-我的MySQL为什么压不上去–写场景

    https://plantegg.github.io/2023/06/30/%E5%AE%9E%E6%88%98%E7%93%B6%E9%A2%88%E5%AE%9A%E4%BD%8D-%E6%88% ...

  2. [转帖]优化命令之sar——最牛命令

    目录 一:sar命令概述 1.1sar概述 1.2sar常用选项 1.3常用参数 二:CPU资源监控 2.1整体CPU使用统计(-u) 2.2各个CPU使用统计(-P) 2.3将CPU使用情况保存到文 ...

  3. IBM Z15设备信息

     

  4. Python 潮流周刊#22:Python 3.12.0 发布了!!

    你好,我是猫哥.这里每周分享优质的 Python.AI 及通用技术内容,大部分为英文.标题取自其中一则分享,不代表全部内容都是该主题,特此声明. 本周刊由 Python猫 出品,精心筛选国内外的 25 ...

  5. SignalR系列文章02---netCoreMvc创建Demo

    1.  新建.net core MVC项目,并引入nuget包 2.  添加客户端库 3.  修改startUp.cs文件,增加services.AddSignalR();和endpoints.Map ...

  6. springboot项目导入外部jar包的bean的几种方式

    背景 公司封装了基础包和日志包,将公共的配置抽取出来,供所有项目使用,因此就需要考虑,怎么引入外部jar包的Bean实例: 思考 因为公司的jar包就是普通的jar,不支持springboot的自动配 ...

  7. 个人找工作面试准备------以及别人面试心得{待更新中ing}

    参考链接先放: https://blog.csdn.net/u014400934/article/details/102577804?utm_medium=distribute.pc_relevant ...

  8. 2.6 PE结构:导出表详细解析

    导出表(Export Table)是Windows可执行文件中的一个结构,记录了可执行文件中某些函数或变量的名称和地址,这些名称和地址可以供其他程序调用或使用.当PE文件执行时Windows装载器将文 ...

  9. Python初学(请大神多多指教)

    python的注释单行注释用#号多行注释用'''  '''注释 基本数据类型 字符串--   n1 = "alex"   n2 = 'root'       n3 = " ...

  10. 案例:推进GTID解决MySQL主主不同步问题

    之前文章介绍过MySQL修改lower_case_table_names参数,如果之前大写存储的表将无法识别,需要特殊处理. 最近遇到一例应用开发人员在修改这个参数之后,为了清除之前大写存储的表,做了 ...