首页 > 编程语言 >Python-迭代器-生成器-装饰器

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

时间:2024-11-19 17:41:51浏览次数:1  
标签:__ 函数 迭代 Python 生成器 yield 对象

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

迭代器用于遍历集合元素,如列表、字典和字符串。
     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

相关文章

  • python 实现将API信息写入的API文档.pdf
    fromreportlab.lib.pagesizesimportletterfromreportlab.platypusimportSimpleDocTemplate,Table,TableStyle,Paragraphfromreportlab.libimportcolorsfromreportlab.lib.stylesimportgetSampleStyleSheetimportosdefgenerate_api_document(url,api_n......
  • Vscode Mingw64抢夺Python路径的解决方案
    VscodeMingw64抢夺Python路径的解决方案系统:Windows11时间:2024/11/19环境:Vscode:版本1.95.3   Python扩展:v2024.20.0   Mingw64:version5.2.37(1)-release(x86_64-pc-msys)说明首先说明一下什么叫抢夺路径:本人在今天再次运行一个此前运行过的python程序......
  • Python内存泄漏分析和弱引用
    在Python中进行内存分析以检测内存泄漏或内存持续增长的问题,是确保应用程序稳定性和性能的重要步骤。以下是详细的指南,涵盖内存分析的工具、流程以及弱引用在处理图片时的应用。一、内存泄漏与内存增长的区别内存泄漏(MemoryLeak):指程序中不再需要的对象由于引用关系没有......
  • 【Python】30个Python爬虫的实战项目!!!(附源码)
    Python爬虫是数据采集自动化的利器。本文精选了30个实用的Python爬虫项目,从基础到进阶,每个项目都配有完整源码和详细讲解。通过这些项目的实战,可以全面掌握网页数据抓取、反爬处理、并发下载等核心技能。一、环境准备在开始爬虫项目前,需要安装以下Python库:......
  • Python从0到100(七十三):Python OpenCV-OpenCV实现手势虚拟拖拽
    前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知......
  • 【高贵的数据结构】学了python你一定要知道的知识之deque双端队列
    deque是Python的collections模块提供的一种双端队列数据结构,支持从队列的两端快速添加和删除元素,时间复杂度为(O(1))。与列表相比,它在高效的双端操作中有明显优势。1.导入dequefromcollectionsimportdeque2.初始化deque创建空队列dq=deque()print(......
  • python调用C#的dll
    1、使用VisualStudio建立C#的dll项目 2、编写C#代码生成dll库 3、安装pythonnet库用于调用C#的dllpipinstallpythonnet4、编写python代码importclr#引入clr模块,它是pythonnet提供的importsys#添加C#DLL所在的目录sys.path.append(r'Csharp_dll......
  • 11.18实验18:迭代器模式
    [实验任务一]:JAVA和C++常见数据结构迭代器的使用信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。实验要求:1. 搜集并掌握JAVA和C++中常见的数据结构......
  • python+vue基于django/flask的连锁超市销售管理系统(超市库存与销售管理平台)java+nodej
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......
  • python+vue基于django/flask的奖学金评定系统(奖学金申请与管理平台)java+nodejs+php-计
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......