迭代器、生成器和装饰器。
迭代器用于遍历集合元素,如列表、字典和字符串。
Iterator 迭代器 可迭代对象iterable 惰性计算的序列 反向迭代
迭代器有两个基本方法(实现了迭代器协议):__iter__() 和 __next__()
iter() 是Python中的一个内置函数,用于从可迭代对象(如列表、元组、字符串、字典、集合或生成器等)创
建一个迭代器 (即将一个可迭代对象转换为迭代器)
next()函数
生成器是特殊的迭代器,使用`yield`产生一系列值,节省内存。
generator,包括生成器和带yeild的generator function
装饰器则允许在不修改原有函数或类的情况下,为其添加新功能
迭代器
支持迭代操作的自定义对象
使用一个生成器函数
Python的迭代协议要求一个 __iter__() 方法返回一个特殊的迭代器对象,
这个迭代器对象实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成
迭代器必须在迭代处理过程中维护大量的状态信息
反向迭代仅仅当对象的大小可预先确定或者对象实现了 __reversed__() 的特殊方法时才能生效。
如果两者都不符合,那你必须先将对象转换为一个列表
在自定义类上实现 __reversed__() 方法来实现反向迭代
迭代器生成的切片对象
迭代器和生成器不能使用标准的切片操作,因为它们的长度事先我们并不知道
迭代加序号: 内置的 enumerate() 函数
enumerate() 函数返回的是一个 enumerate 对象实例,
它是一个迭代器,返回连续的包含一个计数和一个值的元组,
元组中的值通过在传入序列上调用 next() 返回
同时迭代多个序列,使用 zip() 函数,zip() 会创建一个迭代器来作为结果返回
迭代长度跟参数中最短序列长度一致
list(zip(a, b)) dict(zip(headers,values))
iter 函数一个鲜为人知的特性是它接受一个可选的 callable 对象和一个标记(结尾)值作为输入参数
python迭代器方式
from itertools import chain
###对不同的集合中所有元素执行某些操作的时候 需要将所有可迭代对象最为参数传入
接受一个或多个可迭代对象最为输入参数。
然后创建一个迭代器,依次连续的返回每个可迭代对象中的元素。
这种方式要比先将序列合并再迭代要高效的多
比使用两个单独的循环更加优雅
生成器
Generators Generator Expressions
生成器 生成器表达式 生成器对象
yield关键字的时候,函数的返回值为生成器对象
实现原理--使用场景
生成器函数是一个实现管道机制的好办法
yield 语句作为数据的生产者 yield,而这个关键字可以实现函数状态的挂起与恢复
for 循环语句作为数据的消费者
增强的生成器,有send()和close()方法
send()方法给yield传递数据 throw() 允许用生成器抛出异常 close() 可以停止生成器
生成器管道也可以将这类问题从逻辑上变为工作流的处理方式
生成器模式的实现原理主要基于生成器函数和迭代器协议
生成器函数使用 yield 关键字来产生
列表推导式(又称列表解析式)--- 生成器 内存友好版
return data #直接就终止了函数
yield data #直接挂起了函数,等待下次恢复
生成器,它是可以使用next方法来获取值的
yield data 将data作为返回值返回给调用next()的变量
生成器的组合
Python 3.3 引入新语法 yield from
主要的应用场景是在协程中
管道生成器
generate a series of values
A generator is a one-time operation.
reverse_iterator,故名思意就是反向迭代器
reverse-generator 反向生成器--协程
协程 是允许被挂起与被恢复的;协程是可以通过生成器实现的
,yield from 还能自动捕获StopIteration异常,并输出异常对象的value属性
Coroutine(协程),task(任务) 和 Future
yield生成器:借助生成器的特点亦可以实现协程代码
async & awiat:在python3.5中引入的两个关键字,结合asyncio模块使用
Generators and Threads: generator pipelines
control-flow
计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号
装饰器
系统自带的装饰器 property() 函数及 @property 装饰器
@staticmethod
@classmethod
自定义装饰器
python装饰器的4种类型:函数装饰函数、函数装饰类、类装饰函数、类装饰类
装饰器模式和代理模式都是在不改变原有对象的基础上,为对象添加新功能的设计模式。
装饰器提供了比继承更有弹性的替代方案
上下文管理器
上下文管理器 __enter__方法 用于启动计时器;在__exit__中,我们离开上下文
闭包与反射
设计模式
创建型设计模式: 生成器模式
结构型设计模式: 装饰类和被装饰类可以独立发展,而不会相互耦合
行为型设计模式: 迭代器模式
迭代器模式中,我们定义一个抽象的迭代器类,它包含两个方法:
一个是hasNext()方法,用于判断是否还有下一个元素;
另一个是next()方法,用于获取下一个元素。
然后,每个容器类都实现自己的迭代器类,以访问容器中的元素
生成器模式,又称建造者模式,是一种创建型设计模式, 使你能够分步骤创建复杂对象。
该模式允许你使用相同的创建代码生成不同类型和形式的对
装饰器模式(Decorator Pattern) 也称为包装模式(Wrapper Pattern)
是指在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能
try-with-resources
仓颉额外提供了 try-with-resources 表达式语法来自动释放非内存资源
Consuming 从消费者和生产者的角度看生成器
分隔符的注释 (Delimited comment)
程序(Program) 语句(Statement) 数据类型(Data Type)
变量(Variable) 常量(Constant)
运算符(Operator) 控制结构(Control Structure)
算法(Algorithm) 逻辑(Logic) 递归(Recursion)
函数(Function) 参数(Parameter) 返回值(Return Value)
输入(Input) 输出(Output) 注释(Comment)
错误(Error) 异常(Exception) 调试(Debugging)
面向对象编程(Object-Oriented Programming, OOP)
类(Class) 对象(Object)
封装(Encapsulation) 继承(Inheritance) 多态(Polymorphism)
模块化(Modularity)
软件工程原则(Software Engineering Principles)
标签:__,函数,迭代,Python,生成器,yield,对象
From: https://www.cnblogs.com/ytwang/p/18555311