Python学习之--迭代器、生成器
迭代器
迭代器是访问集合元素的一种方式。从对象第一个元素开始访问,直到所有的元素被访问结束。迭代器只能往前,不能往后退。迭代器与普通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学习之--迭代器、生成器的更多相关文章
- Python学习 :迭代器&生成器
列表生成式 列表生成式的操作顺序: 1.先依次来读取元素 for x 2.对元素进行操作 x*x 3.赋予变量 Eg.列表生成式方式一 a = [x*x for x in range(10)] pri ...
- Python学习day17 迭代器&生成器
迭代器&生成器 1. 迭代器 1.1 迭代器 迭代:迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果.每一次对过程的重复称为一次"迭代" 迭代器:帮助对某种对象 ...
- python学习10—迭代器、三元表达式与生成器
python学习10—迭代器.三元表达式与生成器 1. 迭代器协议 定义:对象必须提供一个next方法,执行该方法或者返回迭代中的下一项,或者返回一个StopIteration异常,以终止迭代(只能往 ...
- Python学习笔记之生成器、迭代器和装饰器
这篇文章主要介绍 Python 中几个常用的高级特性,用好这几个特性可以让自己的代码更加 Pythonnic 哦 1.生成器 什么是生成器呢?简单来说,在 Python 中一边循环一边计算的机制称为 ...
- python各种模块,迭代器,生成器
从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能) 本质就是.py结尾的python文件(文件名:test.py,对应的模块名就是test) 包:用来从逻辑上组织模块的,本质就是一个目 ...
- python杂记-4(迭代器&生成器)
#!/usr/bin/env python# -*- coding: utf-8 -*-#1.迭代器&生成器#生成器#正确的方法是使用for循环,因为generator也是可迭代对象:g = ...
- Python学习之旅—生成器对象的send方法详解
前言 在上一篇博客中,笔者带大家一起探讨了生成器与迭代器的本质原理和使用,本次博客将重点聚焦于生成器对象的send方法. 一.send方法详解 我们知道生成器对象本质上是一个迭代器.但是它比迭代器对 ...
- Python学习--07迭代器、生成器
迭代 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). Python里使用for...in来迭代. 常用可迭代对象有 ...
- python学习日记(迭代器、生成器)-乱七八糟
迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退 ...
- python学习 day13 迭代器,生成器,枚举对象
一.复习 1.闭包:定义在函数内部的函数(被函数嵌套的函数) 2.装饰器:闭包的一个应用场景 -- 为一个函数添加新功能的工具 3.开放封闭原则:不能修改源代码,不能修改调用方式,但可以对外提供增加新 ...
随机推荐
- 虚树(树形dp套路)模板——bzoj2286
虚树的核心就是把关键点和关键点的lca重新生成一棵树,然后在这棵树上进行dp https://www.cnblogs.com/zwfymqz/p/9175152.html 写的很好的博客 建立虚树的 ...
- python从入门到大神---3、浮光掠影python3语法
python从入门到大神---3.浮光掠影python3语法 一.总结 一句话总结: 语法不必一次记全部,效率太差,用哪部分内容,就把那部分内容全部记下来 1.python3中单引号和双引号的区别是什 ...
- (转)sqoop常用命令http://www.cnblogs.com/cenyuhai/p/3306037.html
转于:http://www.cnblogs.com/cenyuhai/p/3306037.html 这个连接已经写的很详细了,我看了很受启发.
- 剑指offer——29顺时针打印矩阵
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...
- 3步永久性激活IntelliJ IDEA 亲测有效
1.进到文件夹中:C:\Windows\System32\drivers\etc ,找到hosts文件,用文本编辑器打开文件,将“ 0.0.0.0 account.jetbrains.com ”添加 ...
- mybatis浅显认识
mybatis主配置文件: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configu ...
- C++之数据类型--整形&sizeof关键字
数据类型: C++规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存 整型 **作用**:整型变量表示的是==整数类型==的数据 C++中能够表示整型的类型有以下几种方式 ...
- [MtOI2019]幽灵乐团
题目 一个很暴力的辣鸡做法 考虑到两个数的\(\gcd\)是所有质数次幂取\(\min\),两个数的\(\rm lcm\)是所有质数次幂取\(\max\),于是最后的答案一定是\(\prod p_i^ ...
- Linux网络配置 RPM命令 samba服务 Linux目录结构
第一种方法: (1)用root身份登录,运行setup命令进入到 text mode setup utiliy对网络进行配置,这里可以进行ip,子网掩码,默认网关,dns的设置.(2)这时网卡的配置没 ...
- RAKsmart新出香港服务器的优势
RAKsmart为了更好地服务用户,所以最近RAKsmart新推出得香港服务器又带给了用户更多的选择,那这次RAKsmart新推出香港服务器有哪些优势呢? 1.带宽更大可升至10Mpbs 香港服务器的 ...