Python-迭代器-生成器-装饰器

迭代器、生成器和装饰器。

迭代器用于遍历集合元素,如列表、字典和字符串。
     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)
posted @ 2024-11-19 17:47  辰令  阅读(39)  评论(0)    收藏  举报