迭代器

迭代器是访问集合元素的一种方式。从对象第一个元素开始访问,直到所有的元素被访问结束。迭代器只能往前,不能往后退。迭代器与普通Python对象的区别是迭代器有一个__next__()方法,每次调用该方法可以返回一个元素。
迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素。适合遍历一些巨大的或是无限的集合。

特点:
1 访问者不需要关心迭代器内部的结构,仅需要通过next()方法去获取下一个内容
2 不能随机访问集合中的某个值,只能从头到尾访问
3 访问到一半时不能回退
4 便于循环比较大的数据集合,省内存

l=iter([1,2,3])
>>> l=iter([1,2,3])
>>> l
<list_iterator object at 0x007FB530>
>>> print(l.__next__())
1
>>> print(l.__next__())
2
>>> print(l.__next__())
3
>>> print(l.__next__())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration

读文件的时候,采用for line in file:的形式,是按照迭代器的方式进行读,比较节省内存。

生成器

一个函数调用时返回一个迭代器,那么这个函数就叫做生成器。如果函数中包含
yield语法,那么这个函数会变成生成器

def cash_amount(amount):
while amount>0:
amount -=100:
yield 100
print("又来取钱啦")
atm=cash_amount(500)
print(type(atm))

sample

生成器的好处可以让你在执行函数的时候不必等到函数执行完毕。

实例、使用yield实现单线程中的异步并发效果
应用-生产者消费者模型

def consumer(name):
print("%s 准备吃包子啦!" %name)
while True:
baozi=yield
print("包子[%s]来了,被[%s]吃了!" %(baozi,name)) def producer(name):
c=consumer('A')
c2=consumer('B')
c.__next__()
c2.__next__()
for i in range(10):
print("%s 做好了2个包子!" %name)
c.send(i)
c2.send(i) producer('chef')

Code

Python学习之--迭代器、生成器的更多相关文章

  1. Python学习 :迭代器&生成器

    列表生成式 列表生成式的操作顺序: 1.先依次来读取元素 for x 2.对元素进行操作 x*x 3.赋予变量 Eg.列表生成式方式一 a = [x*x for x in range(10)] pri ...

  2. Python学习day17 迭代器&生成器

    迭代器&生成器 1. 迭代器 1.1 迭代器 迭代:迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果.每一次对过程的重复称为一次"迭代" 迭代器:帮助对某种对象 ...

  3. python学习10—迭代器、三元表达式与生成器

    python学习10—迭代器.三元表达式与生成器 1. 迭代器协议 定义:对象必须提供一个next方法,执行该方法或者返回迭代中的下一项,或者返回一个StopIteration异常,以终止迭代(只能往 ...

  4. Python学习笔记之生成器、迭代器和装饰器

    这篇文章主要介绍 Python 中几个常用的高级特性,用好这几个特性可以让自己的代码更加 Pythonnic 哦 1.生成器 什么是生成器呢?简单来说,在 Python 中一边循环一边计算的机制称为 ...

  5. python各种模块,迭代器,生成器

    从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能) 本质就是.py结尾的python文件(文件名:test.py,对应的模块名就是test) 包:用来从逻辑上组织模块的,本质就是一个目 ...

  6. python杂记-4(迭代器&生成器)

    #!/usr/bin/env python# -*- coding: utf-8 -*-#1.迭代器&生成器#生成器#正确的方法是使用for循环,因为generator也是可迭代对象:g = ...

  7. Python学习之旅—生成器对象的send方法详解

    前言 在上一篇博客中,笔者带大家一起探讨了生成器与迭代器的本质原理和使用,本次博客将重点聚焦于生成器对象的send方法. 一.send方法详解  我们知道生成器对象本质上是一个迭代器.但是它比迭代器对 ...

  8. Python学习--07迭代器、生成器

    迭代 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). Python里使用for...in来迭代. 常用可迭代对象有 ...

  9. python学习日记(迭代器、生成器)-乱七八糟

    迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退 ...

  10. python学习 day13 迭代器,生成器,枚举对象

    一.复习 1.闭包:定义在函数内部的函数(被函数嵌套的函数) 2.装饰器:闭包的一个应用场景 -- 为一个函数添加新功能的工具 3.开放封闭原则:不能修改源代码,不能修改调用方式,但可以对外提供增加新 ...

随机推荐

  1. NX二次开发-弹出选择文件夹对话框

    这个UFUN和NOPEN里没有对应的函数和类,要用C++的方法去做. #include "afxdialogex.h"//弹出选择文件夹对话框头文件 #include " ...

  2. vue中使用router全局守卫实现页面拦截

    一.背景 在vue项目中使用vue-router做页面跳转时,路由的方式有两种,一种是静态路由,另一种是动态路由.而要实现对路由的控制需要使用vuex和router全局守卫进行判断拦截(安全问题文章最 ...

  3. js的线程和同步异步以及console.log机制

    项目上线了,闲下来就写写东西吧.积累了好多东西都没有做笔记~挑几个印象深刻的记录一下吧. js的同步异步以及单线程问题: 都知道单线程是js的一大特性.但是通常io(ajax获取服务器数据).用户/浏 ...

  4. 在vs2010下编译boost

    1. 解压缩后,运行bootstrap.bat批处理文件,得到bjam.exe; 2. 在vs2010下编译boost boost最新版本已经支持vs2010,然而直接下载编译会发现一堆bug: 首先 ...

  5. web开发者性能优化工具(一)

    web开发者性能优化工具 1   数据包嗅探器(在性能优化时,查看页面(包括页面中全部资源)的加载过程) HttpWatch (http://www.httpwatch.com/) 把网络流量用图形的 ...

  6. Android Telephony分析(五) ---- TelephonyRegistry详解

    本文紧接着上一篇文章<Android Telephony分析(四) —- TelephonyManager详解 >的1.4小节.从TelephonyRegistry的大部分方法中: 可以看 ...

  7. ELK日志分析系统(原创)

    一.简介 ELK由Elasticsearch.Logstash和Kibana三部分组件组成: Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引 ...

  8. VBA中msgbox的用法小结

    1.作用在消息框中显示信息,并等待用户单击按钮,可返回单击的按钮值(比如“确定”或者“取消”).通常用作显示变量值的一种方式.2.语法MsgBox(Prompt[,Buttons][,Title][, ...

  9. 安装rubygems

    转载 http://blog.csdn.net/huanghai200911/article/details/51251472 1,下载rubygems-2.4.8.tar包,下载地址:https:/ ...

  10. UC浏览器禁止图片阅读模式处理方法

    本文转载自:https://www.cnblogs.com/MY0101/p/9969818.html UC浏览器点击图片会出现图片阅读模式. 如何处理? <img style=" w ...