首页 > 其他分享 >再次学习类2

再次学习类2

时间:2024-05-12 17:10:49浏览次数:14  
标签:__ index 再次 self 生成器 next 学习 data

迭代器:for循环实际是对容器使用iter(),iter()实际会调用该对象的__iter__()方法,返回一个定义了__next__()方法的迭代器对象,
该迭代器可以逐一访问容器中的元素,使用next()内置函数调用该对象的__next__()方法,next()越界触发StopIteration异常提示for循环结束
class CustomIter:
    #自定义对传入可迭代对象进行逆序输出
    def __init__(self, data):
        self.data = data
        self.index = len(data)

    def __iter__(self):
        return self

    def __next__(self):
        if not self.index:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]


if __name__ == '__main__':
    customIter1 = CustomIter('123456789')
    for info in customIter1:
        print(info, end='')
生成器:是一个用于创建迭代器的简单而强大的工具。 它们的写法类似于标准的函数,但当它们要返回数据时会使用 yield 语句。 
每次在生成器上调用 next() 时,它会从上次离开的位置恢复执行(它会记住上次执行语句时的所有数据值)
可以用生成器来完成的任何功能同样可以通用前一节所描述的基于类的迭代器来完成。 但生成器的写法更为紧凑,因为它会自动创建 __iter__() 和 __next__() 方法。
另一个关键特性在于局部变量和执行状态会在每次调用之间自动保存。 这使得该函数相比使用 self.index 和 self.data 这种实例变量的方式更易编写且更为清晰
def costomeZip(list1, list2):
    length = len(list1) if len(list2) >= len(list1) else len(list2)
    for index in range(length):
        yield [list1[index], list2[index]]

if __name__ == '__main__':
    res = []
    for info in costomeZip([1, 2, 3], [4, 5, 6, 7]):
        res.append(info)
    print(res)
生成器表达:某些简单的生成器可以写成简洁的表达式代码,所用语法类似列表推导式,但外层为圆括号而非方括号。 这种表达式被设计用于生成器将立即被外层
函数所使用的情况。 生成器表达式相比完整的生成器更紧凑但较不灵活,相比等效的列表推导式则更为节省内存

标签:__,index,再次,self,生成器,next,学习,data
From: https://www.cnblogs.com/flags-blog/p/18187953

相关文章

  • 策略梯度玩 cartpole 游戏,强化学习代替PID算法控制平衡杆
     cartpole游戏,车上顶着一个自由摆动的杆子,实现杆子的平衡,杆子每次倒向一端车就开始移动让杆子保持动态直立的状态,策略函数使用一个两层的简单神经网络,输入状态有4个,车位置,车速度,杆角度,杆速度,输出action为左移动或右移动,输入状态发现至少要给3个才能稳定一会儿,给2个完全学不明白,......
  • Presto学习笔记——Go客户端连接Presto
    1.查询PrestoDB(facebook版本)1.创建PrestoDB环境使用docker创建presto测试环境https://hub.docker.com/r/prestodb/presto/tags拉取镜像dockerpullprestodb/presto:0.284启动dockerrun-p8080:8080-ti-v/Users/lintong/Downloads/config.properties:/opt/pres......
  • go学习笔记——wire依赖注入
    wire是google开源的使用依赖注入来自动连接组件的代码生成工具安装goinstallgithub.com/google/wire/cmd/wire@latest官方使用文档:https://github.com/google/wire/blob/main/docs/guide.md文档参考:手把手,带你从零封装Gin框架(十二):使用Wire依赖注入重构golang中的依......
  • Lua热更学习--使用toLua中的协程
    [6]C#访问调table类中的成员变量和函数访问table中的变量和函数lua中可以使用table作为class,因此对table中的函数访问调用是必要的根据前面对table访问和function的获取调用,这里尝试获取调用。依然是如此,此种调用方式获取到的table中的函数是引用拷贝。Main.lua脚本新增内容......
  • Android开发&Kotlin学习笔记
    为了做《基于安卓定位的考勤系统》,学了一些杂乱的知识,在这里简单记录一下。除了在C#桌面应用开发中感性的体会到了些XML布局的知识以及课上学习的Java知识,其他也算是零基础了。GoogleAndroidDeveloper的课程2023/10/25:跟着官方文档先快速入门一下基本内容。截至目前来看官方......
  • sql学习:终于把sql case语句使用讲明白了,一看就懂
    作者|幸福it民工来源|今日头条在数据库查询分析中,经常遇到case条件判断,总结出来供大家参考,下面通过两个实例给大家讲解。case用途介绍:CASE是多条件分支语句,相比IF…ELSE语句,CASE语句进行分支流程控制可以使代码更加晰,易于理解。CASE语句也根据表达式逻辑值的真假来决定执......
  • bash文件书写学习记录
    参考资料:基于Bash脚本自己开发ROS的一键启动-古月居(guyuehome.com)#!/bin/bash和#!/usr/bin/envbash的区别-CSDN博客几种常见shell解释器(sh,bash,csh,tcsh,ash)以及bash的优点_bash与ash-CSDN博客 第一个链接对于bash文件的书写写的挺好的通俗易懂;  launch文件......
  • MATLAB用深度学习长短期记忆 (LSTM) 神经网络对智能手机传感器时间序列数据进行分类|
    原文链接:http://tecdat.cn/?p=26318原文出处:拓端数据部落公众号 最近我们被客户要求撰写关于长短期记忆(LSTM)神经网络的研究报告,包括一些图形和统计输出。此示例说明如何使用长短期记忆(LSTM)网络对序列数据的每个时间步长进行分类。要训​​练深度神经网络对序列数据......
  • [NOI2009] 二叉查找树 & 笛卡尔树学习笔记
    这个题:二叉搜索树原理认识+区间dp;只要熟练相关算法就一定可以做出来。但我不行。。。我们学习一下笛卡尔树:什么垃圾东西,不学了。发现这个题是l蓝书上一道题jqb。二叉查找树又有一个性质:二叉查找树的中序遍历是其代表的序列从小到大排序的结果。而无论Treap如何旋转,其都......
  • 数据结构学习笔记-递归求解森林高度
    森林的高度递归求解问题描述:设计算法求解森林的高度【算法设计思想】两个函数,一个用于计算单个二叉树的高度,另一个用于计算二叉树森林(即一组二叉树)的最大高度。下面是对两个函数的详细解释:1.treeHeight函数这个函数用于计算单个二叉树的高度。二叉树的高度定义为从根节点到......