python之迭代器篇
一.迭代器
只要对象本身有_iter_()_方法,那它就是可迭代的
执行__iter__就会生成迭代器
迭代器有__next__用于获取值
__next__超出界限了会报StopIteration异常
迭代器是一次性的, 且只能一直往前迭代
获取生成器的方法:
迭代器
=
可迭代对象.__iter__()
迭代器
=
iter
(可迭代对象)
迭代器.__next__()
next
(迭代器)
d = {'a':1, 'b':2,'c':3}
i = iter(d)
while True:
try:
print(next(i))
except StopIteration:
break
for循环中in后面的就是迭代器
实际上对于不是迭代器的for循环会自动处理成迭代器, 且在for中自动处理异常现象
d = {'a':1, 'b':2,'c':3} for i in d:
print(i)
文件句柄本身就是一个迭代器
迭代器既含有__next__也含有__iter__
常用数据类型与迭代器:
可迭代对象:
字符串, 列表, 元组, 字典, 集合, 文件
迭代器:
文件
判断方法:
from
collections
import
Iterable,Iterator
f
=
open
(
'file'
)
#判断可迭代的
print
(
isinstance
(f,Iterable))
#查看是否是迭代器
print
(
isinstance
(f,Iterator))
生成器是在函数中, 修改return为yield
效果:
执行该函数之后, 并没有执行该函数体
执行之后, 会返回一个生成器
生成器调用next()函数之后, 会执行函数体到yield语句位置
再调用next()函数之后, 会接着上次yield的位置继续执行函数体
使用for循环调用生成会一次循环就是执行到一个yield
生成器是迭代器的一种
生成器一样可能会产生StopIteration异常, 需要在执行next()语句中加入异常处理
def ger(max): for i in range(max):
yield i g = ger(2) try:
print(next(g))
print(next(g))
print(next(g))
print(next(g))
except StopIteration:
print("done")
import time def tail(file):
with open(file, "r") as f:
f.seek(0, 2)
while True:
line = f.readline().strip()
if line:
yield line
else:
time.sleep(0.3)
continue g = tail('file')
for line in g:
print(line.strip())
import time def tail(file):
with open(file, "r") as f:
f.seek(0, 2)
while True:
line = f.readline().strip()
if line:
yield line
else:
time.sleep(0.3)
continue def grep(pattern,lines):
for line in lines:
if pattern in line:
yield line g = tail('file')
g1 = grep('info', g) for line in g1:
print(line.strip())
协程函数的定义:
在生成器的基础上, 针对yield转换为赋值语句
具体的表现形式如下
def eater(name):
print(name)
while True:
food, soup = yield
print("start to eat", food, soup)
print("done") g = eater("egon") next(g) g.send(("咖喱鸡肉盖饭","酸梅汤"))
协程函数的作用:
yield 后面继续可以添加返回值
yield前面的内容可以通过send函数来传递参数
参数的个数和顺序要和定义的一致, 且不能有空缺
python之迭代器篇的更多相关文章
- 第十六篇 Python之迭代器与生成器
一.迭代器 一. 递归和迭代 生活实例说明什么是递归和迭代 A想去腾达大厦,问B怎么走路,B 说我不知道,我给你问问C,C也不知道,C又去问D,D知道,把路告诉了C,C又告诉B,B最后告诉A, 这就是 ...
- 第六篇:Python函数进阶篇
在了解完了 Python函数基础篇之后,本篇的存在其实是为了整合知识,由于该篇的知识是否杂乱,故大家可以通过点开点连接直接进入其详细介绍,该篇主要大致的介绍一下几个知识点: 一.Python的迭代器 ...
- python基础——迭代器
python基础——迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器 ...
- python基础—迭代器、生成器
python基础-迭代器.生成器 1 迭代器定义 迭代的意思是重复做一些事很多次,就像在循环中做的那样. 只要该对象可以实现__iter__方法,就可以进行迭代. 迭代对象调用__iter__方法会返 ...
- python之迭代器与生成器
python之迭代器与生成器 可迭代 假如现在有一个列表,有一个int类型的12345.我们循环输出. list=[1,2,3,4,5] for i in list: print(i) for i i ...
- Python:迭代器的简单理解
一.什么是迭代器 迭代,顾名思义就是重复做一些事很多次(就现在循环中做的那样).迭代器是实现了__next__()方法的对象(这个方法在调用时不需要任何参数),它是访问可迭代序列的一种方式,通常其从序 ...
- python——iterator迭代器|iterator详解——20140918|
-----------------------------------------------------------------------------前言--------------------- ...
- Python+Selenium练习篇之1-摘取网页上全部邮箱
前面已经介绍了Python+Selenium基础篇,通过前面几篇文章的介绍和练习,Selenium+Python的webUI自动化测试算是入门了.接下来,我计划写第二个系列:练习篇,通过一些练习,了解 ...
- Python人工智能第一篇:语音合成和语音识别
Python人工智能第一篇:语音合成和语音识别 此篇是人工智能应用的重点,只用现成的技术不做底层算法,也是让初级程序员快速进入人工智能行业的捷径.目前市面上主流的AI技术提供公司有很多,比如百度, ...
随机推荐
- Can't connect to X11 window server using 的问题,求解
在JVM中加入-Djava.awt.headless=true对于tomcat ,可以修改catalina.sh,加入:CATALINA_OPTS="$CATALINA_OPTS -Djav ...
- [转] 浅谈session,cookie,sessionStorage,localStorage的区别及应用场景
浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互. 一.cookie和session cookie和session都是用来跟踪浏览器 ...
- HDU 1384 Intervals【差分约束-SPFA】
类型:给出一些形如a−b<=k的不等式(或a−b>=k或a−b<k或a−b>k等),问是否有解[是否有负环]或求差的极值[最短/长路径].例子:b−a<=k1,c−b&l ...
- shell常用监控脚本
1.cpu空闲脚本 top -b -n1 |grep 'Cpu'|awk '{print $5}'|sed 's/%//'|sed 's/id,//' 变量赋值 cpu_id='top -b -n1 ...
- Loadrunner和JMeter并发对比
今天在项目中测试发现,其实LR才是实际意义上的并发测试,JMeter不算并发 记录用户登录日志: LR脚本: 1.登录操作放在init初始化中,用5个虚拟用户并发测试:
- Linux批量清空当前目录中的日志文件
在Linux中,有时需要批量清空当前目录中的日志文件,同时还要保留日志文件. 其实一行shell命令就可以搞定,一起来看看吧. 在当前目录下,键入如下命令: for i in `find . -nam ...
- 浏览器iscroll
::-webkit-scrollbar{width:4px;height:4px;background:transparent}::-webkit-scrollbar-track{background ...
- BZOJ1911 [Apio2010]特别行动队 - 动态规划 - 斜率优化
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 UPD(2018-04-01):用Latex重打了公式…… 题意概括 把一个整数序列划分成任意连续的段,使得划分出 ...
- Node.js实现网络编程
http://www.cnblogs.com/myzhibie/p/4579122.html
- python自带线程池
1. 注意: 导包是: from multiprocessing.pool import ThreadPool #线程池不在thrading中 2. 代码: from mutiprocessing.p ...