python内置函数的使用(一)
迭代器(iterator)和可迭代对象(iterable)
在python中,要实现要个对象可以进行遍历,也就是实现for循环,那么他必须是一个可迭代对象,例如string,tuple,list,dict,set都是可迭代对象(iterable),实现的方法是写入了__iter__()函数,前面我们说过鸭子模型,只要实现了这个方法,那么自定义类就可以看成是 一个可迭代对象。如果我们想要实现一个迭代器,那么我们就要实现写入__next__()方法,举个例子要把list迭代对象转变成迭代器,我们有两种方法让他转变为迭代器,一种就是直接用内置函数iter(),或者自定义类,重写__next__()方法。
自定义实现类实现for循环功能:
class A:
pass
a = A()
for i in a:
print(i) #打印结果:'A' object is not iterable 报错,说明他不是可迭代对象
首先我们要让他是一个可迭代对象:
class A:
def __iter__(self):
pass
a = A()
for i in a:
print(i) #打印结果:还是报错
我们为什么实现了__iter__()把对象变成可迭代对象,怎么还不能使用for循环,我们需要知道,我们执行for循环的时候,他会去找__next__()方法,我们自定义的方法中没有实现__next__(),那么我们实现一下
class A:
def __iter__(self):
self.a = 1
return self #这里必须返回自身的实例
def __next__(self):
a = self.a
if a < 10:
self.a += 1
else:
self.a = 1 #重新赋值并结束循环
raise StopIteration
return a
a = A()
for i in a:
print(a) # 打印结果:1 2 3 4 5 6 7 8 9
这样我们便实现了自定义类实现for循环功能,同时由于他实现了__next__()方法,他本身就是一个迭代器。
用iter()转化为迭代器
l = [1,2]
for i in l:
print(i)
l = iter(l)
print(l) #打印结果:<list_iterator object at 0x000000000256C128> 我们发现然是一个新的对象,不再是list了,同时他也成为了一个迭代器
print(next(l)) # 打印结果:1
print(next(l)) # 打印结果:2
print(next(l)) #打印结果:报错
我们可以看到迭代器我们可以用next(l)只会一步一步去找下一个,那么我们什么时候能用到迭代器呢?我们执行for循环会把所有的结果都查找到并使用,那么会造成内存浪费。我们发现当我们不知道确定的对象数量的时候,迭代器就很好使用了,也能使用next()找下一个数。我们实现的for循环必须有一个界限值,不然电脑会奔溃。
总结:内置iterable对象可以使用for循环,iterator对象可以使用next()方法,自定义类__iter__()和__next__()必须都实现才能使用for循环,那么自定义类本身就是一个迭代器了
生成器的使用
def B():
for i in range(3):
yield i
b = B()
print(b) #一个生成器
for i in b:
print(i) #打印结果:0,1,2
for i in b:
print(i) # 打印结果: 空的
为什么第二次for循环后不打印任何东西了?生成器在执行完后不会从新给定值,它只生产出之后就完成了自己的使命,我们可以说生成器就是一种特殊的迭代器。
python内置函数的使用(一)的更多相关文章
- python内置函数
python内置函数 官方文档:点击 在这里我只列举一些常见的内置函数用法 1.abs()[求数字的绝对值] >>> abs(-13) 13 2.all() 判断所有集合元素都为真的 ...
- python 内置函数和函数装饰器
python内置函数 1.数学相关 abs(x) 取x绝对值 divmode(x,y) 取x除以y的商和余数,常用做分页,返回商和余数组成一个元组 pow(x,y[,z]) 取x的y次方 ,等同于x ...
- Python基础篇【第2篇】: Python内置函数(一)
Python内置函数 lambda lambda表达式相当于函数体为单个return语句的普通函数的匿名函数.请注意,lambda语法并没有使用return关键字.开发者可以在任何可以使用函数引用的位 ...
- [python基础知识]python内置函数map/reduce/filter
python内置函数map/reduce/filter 这三个函数用的顺手了,很cool. filter()函数:filter函数相当于过滤,调用一个bool_func(只返回bool类型数据的方法) ...
- Python内置函数进制转换的用法
使用Python内置函数:bin().oct().int().hex()可实现进制转换. 先看Python官方文档中对这几个内置函数的描述: bin(x)Convert an integer numb ...
- Python内置函数(12)——str
英文文档: class str(object='') class str(object=b'', encoding='utf-8', errors='strict') Return a string ...
- Python内置函数(61)——str
英文文档: class str(object='') class str(object=b'', encoding='utf-8', errors='strict') Return a string ...
- 那些年,很多人没看懂的Python内置函数
Python之所以特别的简单就是因为有很多的内置函数是在你的程序"运行之前"就已经帮你运行好了,所以,可以用这个的特性简化很多的步骤.这也是让Python语言变得特别的简单的原因之 ...
- Python 内置函数笔记
其中有几个方法没怎么用过, 所以没整理到 Python内置函数 abs(a) 返回a的绝对值.该参数可以是整数或浮点数.如果参数是一个复数,则返回其大小 all(a) 如果元组.列表里面的所有元素都非 ...
- 【转】实习小记-python 内置函数__eq__函数引发的探索
[转]实习小记-python 内置函数__eq__函数引发的探索 乱写__eq__会发生啥?请看代码.. >>> class A: ... def __eq__(self, othe ...
随机推荐
- 大数据学习笔记——Hbase高可用+完全分布式完整部署教程
Hbase高可用+完全分布式完整部署教程 本篇博客承接上一篇sqoop的部署教程,将会详细介绍完全分布式并且是高可用模式下的Hbase的部署流程,废话不多说,我们直接开始! 1. 安装准备 部署Hba ...
- 8种经常被忽视的SQL错误用法,你有没有踩过坑?
1.LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time 字段上加组合索引 ...
- Linux 内存映射函数 mmap()函数详解
mmap将一个文件或者其它对象映射进内存.文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零.mmap在用户空间映射调用系统中作用很大.头文件 <sys/ ...
- static介绍、内部类、final、权限修饰符的作用范围
static 关键字:(可用于修饰方法.变量) static 特点: static是静态修饰符,一般修饰成员变量.被static修饰的属于全局共享.被static修饰的成员属于 ...
- LeetCode刷题总结-树篇(下)
本文讲解有关树的习题中子树问题和新概念定义问题,也是有关树习题的最后一篇总结.前两篇请参考: LeetCode刷题总结-树篇(上) LeetCode刷题总结-树篇(中) 本文共收录9道题,7道中等题, ...
- python错误调试print、assert、logging、pdb、pdb.set_trace()
世界人都知道,程序总会有bug存在.复杂点的bug一般人不能一眼看出,这就一要一套调试程序的手段. 方法一:使用print()函数直接打印: >>> def foo(s): ... ...
- NPOI 获取单元格的值
1.日期格式的坑 var cell = row.GetCell(i);//获取某一个单元格 var value = ""; if (cell != null) { if (cell ...
- 《Dotnet9》系列之建站-中文站最好WordPress主题,自媒体,博客,企业,商城主题一网打尽
大家好,我是Dotnet9小编,一个从事dotnet开发8年+的程序员.本文介绍WordPress主题JustNews,本站Dotnet9既是使用WordPress + JustNews主题搭建而成的 ...
- MySQL主从复制配置(Docker容器内配置)
主从工作原理: 配置介绍: MASTER:172.17.0.2 SLAVE:172.17.0.3 MASTER内数据库: 仅仅同步以上两个库(在configerdata库中创建了wu2表) SLAVE ...
- 关于c#winform用sharpGL(OpenGL)绘制不出图形,绘制窗口是个黑框的坑
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11790309.html 在c++的opengl中可能是因为是最基本的库,很多东西都把你做好了 ...