首页 > 编程语言 >对python迭代器的理解

对python迭代器的理解

时间:2023-06-14 10:45:08浏览次数:37  
标签:iterator 迭代 python self actions next 理解 action

  1. 迭代器的接口
  2. 迭代器的用法
  3. 自定义迭代器
  4. 迭代器的意义

1迭代器的接口

  • 可迭代对象
    image
  • 计算对象之间的共同属性
    image
    得到可迭代对象的共同属性
    image
    上述对象都是容器类型,都有长度
    加入文件对象再次求交集
    image
    得到可迭代对象的唯一共同接口:_iter _
    image
    image
    生成了迭代器
    同样方法计算迭代器的共同属性
    得到两个接口
    image

2迭代器的用法

点击查看代码
# 构建迭代器
actions = ['点赞','投币','收藏']
actions_iterator = iter(actions)
# 多次迭代
action = next(actions_iterator)
print(action)
action = next(actions_iterator)
print(action)
action = next(actions_iterator)
print(action)
action = next(actions_iterator)
print(action)
运行结果:

image
由此总结迭代三个关键步骤:
image

通过循环模拟迭代

点击查看代码
iterator = iter(actions)
while True:
    try:
        print(next(iterator))
    except StopIteration:
        print('迭代结束')
        break
点击查看代码
Black_List = ['白嫖','取关']
class SuIterator:
    def __init__(self,actions):
        self.actions = actions
        self.index = 0 #初始化索引下标
    def __next__(self):
        while self.index < len(self.actions):
            action = self.actions[self.index]
            self.index += 1 #更新索引下标
            if action in Black_List:
                continue
            elif '币' in action:
                return  action*2
            else:
                return action
        raise  StopIteration
actions = ['点赞', '投币', '收藏']
SuziIterator = SuIterator(actions)
while True:
    try:
        print(next(SuziIterator))
    except StopIteration:
        break

迭代器协议
image
所有迭代器的_iter_方法都只用returnn self即可

4迭代器的意义

image
迭代器就是为了让数据结构能快捷地遍历而定义的辅助对象

深层的意义

现有两种可迭代对象

  • 容器类型:
    列表、元组、字典
    只有_ iter _接口
    静态的数据
    需要额外的迭代器支持
    支持多次迭代
    image
    这种情况下只有可迭代对象在前台露脸,而迭代器是在背后使用默认方式悄悄构建没有存在感,生命周期和循环绑定

  • 迭代器类型
    文件、StringIO等
    同时实现_ iter _ 和_ next _接口
    动态的
    只能迭代一次
    image
    整个迭代过程只需要迭代器,迭代器不光是从后台走到了前台,而且让可迭代对象远离了循环,和当前循环操作解耦了,于是乎一个可迭代对象可以构建出多个不同的迭代器,一种迭代器可以应用于任意多个可迭代对象,大大增强了代码复用能力

应用场景

数据管道

image
image
image

数据生成器

image
这个迭代器不需要存储数据,StopIteration都不用管,可以无穷无尽迭代下去,数据实时产生不占用内存空间

标签:iterator,迭代,python,self,actions,next,理解,action
From: https://www.cnblogs.com/luwanzi/p/17478988.html

相关文章

  • Python:packaging包解析语义化版本(Semantic Versioning)
    参考文章语义化版本2.0.0语义化版本与其在Python中的使用packaging是python的pip自带包,不需要额外安装#-*-coding:utf-8-*-"""@File:demo.py@Date:2023-06-09"""frompackagingimportversioncurrent_version='1.3.4'parsed_versio......
  • 深入理解 Istio 流量管理的超时时间设置
    环境准备部署httpbin服务:kubectlapply-fsamples/httpbin/httpbin.yaml部署sleep服务:kubectlapply-fsamples/sleep/sleep.yamlhttpbin服务作为接收请求的服务端,sleep服务作为发送请求的客户端。设置超时时间在sleep服务中向httpbin服务发出请求:export......
  • python基础
    第1课初识Python程序设计语言_哔哩哔哩_bilibili主流语言介绍:编译器与解释器:python特点:......
  • 【python】关键字global
    关键字global1.局部变量和全局变量重名:定义了一个全局变量site,接着,我们定义了一个函数func,同时,在函数func里面,我们首先打印变量site的值,接着再次给变量site赋值。最后,调用函数func,此时程序报错,理论上我们在func函数里面第一次打印使用的应该是全局变量site,但实际上程......
  • python: read excel
     """Insurance。pyedit:geovindu,GeovinDu,涂聚文date2023-06-13保险类"""importsysimportosclassInsurance:"""保险类"""def__init__(self,InsuranceName,InsuranceCost,IMo......
  • python+uiautomator2判断app是否进入到闪屏广告页面
    前提背景:app内部存在多处广告,需要进行进行自动化:1.查看app是否成功跳转了页面2.页面是否空白3.大致经历的耗时主要思路如下:点击前进行截图操作,点击后进行判断判断图片是否空白defis_blank(image_path,gray_value=250,threshold=0.9):"""函数会计算一幅图像中......
  • Python调用C/C++动态库
    一、编译C++代码并封装成动态库1、创建编译dll文件的项目,在上面的官网介绍的更详细,这里就不多做介绍了。注意在vs之中新建一个项目,项目选择动态链接库(DLL)2、2.在源文件中添加cpp文件并写好函数#include<iostream>#defineMATHLIBRARY_APIextern"C"__declspec(dllexport)......
  • Python基础之subprocess模块、hashlib模块、日志模块
    subprocess模块tasklist:列举出来文件进程命令"""1.以后我们可以用自己的电脑连接上别人的电脑(socket)2.通过subprocess可以在别人的计算机上执行我们想要执行的命令3.把在别人计算机上执行的结果给返回过来"""importsubprocessimportsubprocessres=subprocess.P......
  • python 之logging 模块
    一、日志的简单使用1、什么是日志记录你的代码在执行过程中的一些变化(记录的是一些有意义的变化)2、日志的5个等级importlogginglogging.debug('debugmessage')#10logging.info('infomessage')#20logging.warning('warningmessage')#30logging.error('errorm......
  • python 3.11.4 安装教程
    python官网 WelcometoPython.org.1.下载python进入官网点击Downloads找到3.11.4版本 点击Download  找到对应的电脑版本进行下载 2.安装python(1)双击下载好的python-3.11.4-amd64.exe(2)勾选AddPython3.7toPATH,再点击CustomizeinstallationInstallno......