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. [转帖]10--k8s之数据持久化

    https://www.cnblogs.com/caodan01/p/15136217.html 目录 一.emptDir 二.hostPath 三.pv 和 pvc 1.环境准备 2.创建pv 3. ...

  2. [转帖]CentOS 7 下用 firewall-cmd / iptables 实现 NAT 转发供内网服务器联网

    https://www.cnblogs.com/hope250/p/8033818.html 自从用 HAProxy 对服务器做了负载均衡以后,感觉后端服务器真的没必要再配置并占用公网IP资源.而且由 ...

  3. React中useEffect、useCallBack、useLayoutEffect

    在函数中使用定时器 import { useEffect, useState } from "react"; export default function Funcom() { ...

  4. uni-app 顶部配置搜索框和左右图标

    顶部的图标只支持本地图片哈,所以你要将阿里巴巴上的图标下载到本地, 然后只要XXX.ttf这个文件就行了 然后放在static这个文件中 在pages.json中fontSrc进行引入. text:使 ...

  5. echarts饼图的配置 封装组件的注意点

    1==>tooltip 类似饰hover效果提示框组件.光标放上去会触发 2==>formatter // 饼图 {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比 ...

  6. VictoriaMetrics 1.80版本中值得关注的新特性

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 change log请看:https://github.c ...

  7. linux服务器cup100%问题排查

    一.出现问题在发现公司门禁服务无法开门的第一时间,去线上服务器上查看了一下进程的运行情况,具体运行如下: 第一次在查看的时候发现并没有我需要的服务entranceguard进程(图片是后续截图的) 二 ...

  8. TienChin 活动管理-删除活动

    后端 ActivityController.java @PreAuthorize("hasPermission('tienchin:activity:remove')") @Log ...

  9. 虚拟IP绑定公网IP访问

    绑定公网 IP 我们目前的虚拟 IP,还不能通过公网的形式进行访问,我们首先,来使用内部的 IP 进行访问看看效果如下: curl 虚拟IP 如上图我访问了两次,第一次访问返回的是 2222 的 ng ...

  10. 【一】MADDPG-单智能体|多智能体总结(理论、算法)

    相关文章: [一]MADDPG-单智能体|多智能体总结(理论.算法) [二]MADDPG--单智能体|多智能体总结算法实现--[追逐游戏] [一]-环境配置+python入门教学 [二]-Parl基础 ...