Python学习 :迭代器&生成器
列表生成式
列表生成式的操作顺序:
1、先依次来读取元素 for x
2、对元素进行操作 x*x
3、赋予变量
Eg.列表生成式方式一
a = [x*x for x in range(10)]
print(a)
>>>[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Eg.列表生成式方式二
def f(n):
return n*n
a = [f(x) for x in range(10)]
print(a)
>>>[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
生成器
定义生成器可以使用yield关键词。在Python中,它作为一个关键词,是生成器的标志
生成器一共有两种创建方式:
方式1:s=(x*x for x in range(n)) -----n为整数
s=(x*x for x in range(5))
print(s)
>>> at 0x00000152A77E0DB0> # 创建出一个生成器对象
print(next(s)) # 等价于s.__next()__在python2 中: s.next()
print(next(s))
for i in s:
print(i)
>>> 0
1
4
9
16
方式2:生成器对象 yield 存在
def f():
print('Hello')
yield 1 # 类似于 return 的作用
print('World!')
yield 2
b=f()
print(b)
# next(b) # 在运行到了第一个 yield 后,函数会停止并暂时地挂起
# next(b) # 当第二次执行next()时,生成器会从yield 1,上一次的工作状态开始工作继续
for i in b:
print(i)
>>>Hello
1
World!
2
迭代器
迭代器需要满足两个条件:
1、有 iter 方法
2、有 next 方法
Eg.创建迭代器的方式
from collections import Iterator,Iterable
l = [1,2,3,4,5]
a = iter(l) #l.__iter__() 通过iter()函数来获得一个Iterator对象
print(a)
print(next(a))
print(next(a))
>>><list_iterator object at 0x0000023A7CE027B8>
1
2
(一) send()方法
send拥有next的功能,但除此之外send可以在yield处传递参数并在生成器里接收,因为第一次send时并没有在yield处开始,所以没有变量来接收参数,所以可以使用g.send(None)来进行第一
次,或者使用next()
生成器中也可以这样使用
def f():
print('Hello')
print('World!')
yield 1 # 类似于 return 的作用
print('Bye!')
yield 2
b=f()
b.send(None)
b.send(1)
>>>Hello
World!
Bye!
(二)isinstance()方法
可以使用isinstance()来判断一个对象是否是Iterator对象
from collections import Iterator,Iterable
l = [1,2,3,4,5]
a = iter(l) #l.__iter__()
print(isinstance(l,list)) # 判断 l 是不是list类型
print(isinstance(l,Iterable)) # 判断 l 是不是Iterable对象
print(isinstance(l,Iterator)) # 判断 l 是不是迭代器
>>>True
True
False
注意:
其实生成器就是迭代器,但是迭代器不一定是生成器
字符串、元组、列表、集合、字典都是可迭代对象(Iterable)
可以通过iter()函数来获得一个Iterator对象
Python学习 :迭代器&生成器的更多相关文章
- Python学习——迭代器&生成器&装饰器
一.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素.迭代器仅 ...
- python函数-迭代器&生成器
python函数-迭代器&生成器 一.迭代器 1 可迭代协议 迭代:就是类似for循环,将某个数据集内的数据可以“一个挨着一个取出来” 可迭代协议: ① 协议内容:内部实现__iter__方法 ...
- Python学习-迭代器、生成器
一.迭代器 1. 可迭代对象 我们知道字符串.列表.元组.字典.集合都可以使用for语句进行循环遍历,然后输出每一个元素,这些都是可迭代对象. 检查对象是否是可迭代对象可以用两种方式去判断: (1)使 ...
- Python基础-迭代器&生成器&装饰器
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 我现在有个需求,看 ...
- Python学习二(生成器和八皇后算法)
看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...
- 【python】迭代器&生成器
源Link:http://www.cnblogs.com/huxi/archive/2011/07/01/2095931.html 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素 ...
- python学习之生成器
4.6 生成器Generrator 生成器本质就是迭代器.python社区生成器与迭代器是一种. 生成器与迭代器的唯一区别:生成器是我们自己用python代码构建的 4.6.1生成器初识 py ...
- python学习------迭代器协议和生成器
一.递归和迭代 递归:自己调用自己 举例解释:问路 A问B康明网络科技怎么走,B说我不是很清楚,我帮你问问C,C说我也不知道.我问问D,D说 就在兴隆.之后D返回结果给C,C返回结果给B,B返回结 ...
- day13 python学习 迭代器,生成器
1.可迭代:当我们打印 print(dir([1,2])) 在出现的结果中可以看到包含 '__iter__', 这个方法,#次协议叫做可迭代协议 包含'__iter__'方法的函数就是可迭代函数 ...
- python学习之- 生成器/迭代器
列表生成式写法: [ i*2 for i in range(10) ]也可以带函数 [ fun(i) for i in range(10) ] 生成器:一边循环一边计算的机制称为生成器.在常用函数中, ...
随机推荐
- Sandworm Attack小结
这个漏洞刚出来时就分析过,当时大致弄明白了原理,但对很多细节和原理还是一知半解.后来开始找工作……今天终于有时间来把欠的这部分功课补上. 这个漏洞网上的各种中英文分析已经很多了,因此这里我只根据自己的 ...
- 设置dedecms标签 [field:global.autoindex/] 初始值{class递增}
在{dede:arclist/}这个标签中有个[field:global.autoindex/],是从0开始自增,如果我们想自定义一个数值,比如自定义从2开始.那么就可以写成下面代码: [field: ...
- Python之Dict和Set类型(入门5)
转载请标明出处: http://www.cnblogs.com/why168888/p/6407905.html 本文出自:[Edwin博客园] Python之Dict和Set类型 1. Python ...
- MATLAB入门学习(一)
开始MATLAB入门啦,,,首先感谢xyy大神的帮助!然后我们开始学习吧!<( ̄︶ ̄)↗[GO!] 工作空间窗口:保存了你定义的常量,变量之类的,可以保存也可以被调用. 保存的话会生成一个mat ...
- 「LG2664 树上游戏」
题目 这真是一道神仙的一批的题目 定义\(s(i,j)\)表示从点\(i\)到点\(j\)经过的颜色数量 设 \[sum_i=\sum_{j=1}^ns(i,j)\] 求出所有的\(sum_i\) 考 ...
- 【Hankson 的趣味题】
可能我只适合这道题的50分 但还是要争取一下的 我们知道对于\(gcd\)和\(lcm\)有这样的定义 \(a=\prod _{i=1}^{\pi(a)}p_i^{d_{i}}\) \(b=\prod ...
- select、poll和epoll比较
select select能监控的描述符个数由内核中的FD_SETSIZE限制,仅为1024,这也是select最大的缺点,因为现在的服务器并发量远远不止1024.即使能重新编译内核改变FD_SETS ...
- springboot+mybatis+shiro——shiro简介
转载:[一]shiro入门 之 Shiro简介 一.shiro介绍: 官方网址:http://shiro.apache.org/introduction.html,shiro的功能包括:认证.授权.加 ...
- Coursera 机器学习基石 第4讲 学习的可行性
这一节讲述的是机器学习的核心.根本性问题——学习的可行性.学过机器学习的我们都知道,要衡量一个机器学习算法是否具有学习能力,看的不是这个模型在已有的训练数据集上的表现如何,而是这个模型在训练数据外的数 ...
- Arduino 入门之小星星
原理:通过编号映射不同的频率音频信号,配合延时输出,达到演奏音乐和跑马灯的效果. 优酷视频链接:https://v.youku.com/v_show/id_XMzcxODQ4NjA3Mg==.html ...