Python 三大利器:迭代器、生成器、装饰器
Python 中的三大利器包括: 迭代器、生成器、装饰器,利用好它们才能开发出最高性能的代码,涉及到的内置模块 itertools 提供迭代器相关的操作。
迭代器
迭代是Python最强大的功能之一,是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()。
字符串,列表或元组对象都可用于创建迭代器:
创建一个迭代器
把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__() 。
如果你已经了解的面向对象编程,就知道类都有一个构造函数,Python 的构造函数为 __init__(), 它会在对象初始化的时候执行。
__iter__() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成。
__next__() 方法(Python 2 里是 next())会返回下一个迭代器对象。
实例:创建一个返回数字的反向迭代器,初始值为N,逐步递减 1:
class Descend():def __init__(self,N):self.N=Nself.a=0def __iter__(self):return selfdef __next__(self):while self.a<self.N:self.N-=1return self.N+1raise StopIteration>>> [i for i in Descend(10)]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
>>>
StopIteration
StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 __next__() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。
生成器
装饰器
Python 三大利器:迭代器、生成器、装饰器相关推荐
- Python基础 day4 迭代器生成器 装饰器 Json pickle 数据序列化 软件目录结构规范 作业:ATM项目开发...
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 列表生成器 1.列表生成式,迭代器&生成器 列表生成式 孩子, ...
- python学习day-8 迭代器 生成器 装饰器
http://www.cnblogs.com/linhaifeng/articles/7580428.html 迭代器#迭代器即迭代的工具,那什么是迭代呢?#迭代是一个重复的过程,每次重复即一次迭代, ...
- 迭代器 生成器 装饰器 匿名函数
迭代器 生成器 装饰器 匿名函数 #可迭代对象:列表.字典.集合.字符串:能够被for 循环遍历的对象# 数字类型不可迭代:# name="wangyifei"# for i in ...
- 迭代器/生成器/装饰器 /Json pickle 数据序列化
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...
- Day4 - Python基础4 迭代器、装饰器、软件开发规范
Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1. ...
- python迭代器生成器装饰器
基本概念 学习python中有什么不懂的地方,小编这里推荐加小编的python学习群:895 817 687有任何不懂的都可以在里面交流,还有很好的视频教程pdf学习资料,大家一起学习交流! 1.容器 ...
- Python 3 学习——函数扩展and迭代器生成器装饰器
Python 学习的第九小节 写此博客 是为了激励自己,并且将自己的心得以及遇到的问题与人分享 一.学习笔记 1. 高阶函数 函数名可以作为函数参数输入 .可以进行赋值.还可以作为返回值. 2.作用域 ...
- python 生成器装饰器_4.python迭代器生成器装饰器
基本概念 1.容器(container) 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中.通常这类数据结构把所有的元 ...
- python 生成器装饰器_七.python迭代器生成器装饰器
1.迭代器 1.1 什么是可迭代对象(Iterable)? 定义:可以直接作用于for循环的对象统称为可迭代对象,即Iterable. 可迭代对象包括: 1.集合数据类型:如list.tuple.di ...
- day04 迭代器生成器装饰器
目录 1.迭代器 2.生成器 3.推导式 4.匿名函数 5.内置函数 6.递归 7.闭包 8.装饰器 一.迭代器 特点: 1. 省内存 2. 只能向前. 不能反复 3. 惰性机制 让不同的数据类型 ...
最新文章
- synchronized同时对原子性、可见性、有序性的保证
- Keil uVision5 下载程序 add flash programming algorithm选项缺少需要的下载算法的解决办法
- [LeetCode] Search Insert Position 搜索插入位置
- Spring【依赖注入】就是这么简单
- 【问链-EOS公开课】第十四课 EOS从单签名到多签名
- ubuntu14.04 通过PPA 安装ffmpeg
- Asterisk权威指南/第五章 用户设备配置
- android磁场传感器页面布局在哪,基于磁场检测的寻线小车传感器布局研究
- ffmpeg 如何音视频同步
- javascript函数防抖Debounce
- EPICS Archiver Appliance在Debian11下安装文档
- 爬虫实用分析工具网址
- 个人空间岁末大回报活动12月16日获奖名单
- vue3+ts+vant移动端H5项目搭建
- 1.2 聪明的投资者:投资与投机(聪明投资者的预期收益)
- rs485数据线接反_数据信号TXD、RXD 发送和接受怎么区分正负极呢? 现在数据信号TXD、RXD需接RS485+ RS485-信号该怎么接呢...
- 服务器主机和显示器怎么连接,主机跟显示器怎么连接
- exercises of nginx and images,more efforts, more happiness
- Unix波澜壮阔的发展史
- Hadoop支持的文件格式之Text
热门文章
- NAS论文笔记:代理模型篇:NSGA Net V2: Evolutionary Multi-Objective Surrogate-Assisted Neural Architecture Sear
- 【莫安迪原创摄影作品】深圳最美夕阳-烟云成画
- vscode Couldn‘t start client Rust Language Server
- 巧用位运算实现大小写转换
- 一文带你走进网络编程
- 雷电9模拟器安装抓包工具whistle证书
- 互联网行业中最常用的数据库——MySQL 索引、事务与存储引擎
- 【小技巧】一种简单的办法在verilog中处理小数运算
- 【凝水成冰】记学生事务系统的结构化
- ARP协议和NDP协议分析