首页 > 其他分享 >迭代器协议、可迭代对象(迭代器)、三元表达式、生成器

迭代器协议、可迭代对象(迭代器)、三元表达式、生成器

时间:2024-07-03 10:09:18浏览次数:21  
标签:迭代 -- res 生成器 li next 表达式

今天说的这老几位可是老牛逼了,认真看,咱们挨个介绍哈。

1、迭代器协议
(1)有一个next()方法
(2)只能往后走不能往前退

2、可迭代对象
可迭代对象又叫做迭代器,什么是可迭代对象呢?
很简单,满足迭代器协议的对象就是可迭代对象。
说白了,就是满足前面那两条:有一个next()方法,只能往后走不能往前退。

--注意:for循环就是进行迭代,比如:
li = [1,2,3,4,5}
for i in li:
print(i)
上面这个例子其实就是利用for循环来实现对li列表的遍历,那么列表li就是迭代器吗?
很抱歉,不仅列表不是,元组、字符串、字典、集合通通不是迭代器。
那么问题来了,那怎么能够被for循环进行遍历呢?
因为它们自身有一个__inte__()方法,调用这个方法以后就是一个迭代器了。
res = li.iter() -- res此时就是一个迭代器,不信打印一下res看看
print(res) 输出:<list_iterator object at 0x000001ECE05C8358> 意思获取的是一个可迭代对象的内存地址
print(res.next()) -- 注意,迭代器一次只能拿出一个值。

3、三元表达式
这个就有点意思了,其实作用就是减少代码量。直接看例子吧!

for i in range(5):
if i < 3:
print(i)

改写三元表达式(这里的做法是列表解析):
[i for i in range(5) if i < 3]
注意:i是一元、for i in range(5)是一元、if i < 3是一元,故为三元。

4、生成器
所谓生成器,其实就是一个迭代器(可迭代对象),说白了就是直接就有一个next()方法。
生成器咋玩的?其实就是一个就是把列表解析的[]换成小括号。废话不多说,直接来个例子吧。
res = (i for i in range(5)) -- 这就是传说中的生成器表达式
print(res)
输出:<generator object at 0x0000019698E1FE08> --这就是一个生成器对象
res.next()

next(res)
一次拿出一个值。

标签:迭代,--,res,生成器,li,next,表达式
From: https://www.cnblogs.com/kkbest/p/18280333

相关文章

  • 55、Flink 中使用 Java Lambda 表达式详解
    1)概述1.注意Flink支持对JavaAPI的所有算子使用Lambda表达式,但是,当Lambda表达式使用Java泛型时,需要显式地声明类型信息。2.示例和限制示例:map()函数使用Lambda表达式计算输入值的平方。不需要声明map()函数的输入i和输出参数的数据类型,因为Java编......
  • MDX的魔法:探索SQL Server中的多维表达式
    ......
  • Java知识点整理 18 — Lambda表达式
    一.简介Lambda表达式是函数式编程思想的体现,强调做什么,而不是以什么方式去做。面向对象编程思想强调的是对象,必须通过对象的形式来做一些事情。比如多线程执行任务,需要创建对象,对象需要实现指定接口,然后再执行等。过程相对繁琐。而如果使用函数式编程思想,可以直接通过传递......
  • Lambda表达式可并行性
    今天补充Lambda表达式知识的时候,有一个可并行性的特性://使用Lambda表达式和StreamAPI进行并行计算List<Integer>numbers=Arrays.asList(1,2,3,4,5);intsum=numbers.parallelStream().mapToInt(Integer::intValue).sum();上面的代码中,使用Lambda表达式结合了S......
  • C/C++ 赋值表达式注意事项
    在C/C++中,赋值表达式是基础且关键的一部分,它用于给变量赋值。理解和正确使用赋值表达式对于编写有效、可维护的代码至关重要。以下是一些关于C/C++赋值表达式的注意事项:赋值操作符:在C/C++中,赋值是通过赋值操作符=完成的。这意味着将右侧的值或表达式的结果赋给左侧的变......
  • 正则表达式
    正则模式^表达式$^从整个字符串开头的地方匹配$从整个字符串的结尾开始匹配模糊匹配.匹配任意字符,除了换行符*重复匹配*号前面0个或多个的表达式。?重复匹配?号前面0个或1个由前面的正则表达式定义的片段,非贪婪方式(?写在数量词的之后)+重复匹配+号前面1个或多......
  • JavaScript 编程语言【 数据类型】过滤|排序|映射|迭代
    文章目录将border-left-width转换成borderLeftWidth过滤范围原位(inplace)过滤范围降序排列复制和排序数组创建一个可扩展的calculator映射到names映射到对象按年龄对用户排序随机排列数组获取平均年龄数组去重从数组创建键(值)对象Iterableobject(可迭代对象)Symbol.......
  • 常用正则表达式
    一、校验数字的表达式 1数字:^[0-9]*$ 2n位的数字:^\d{n}$ 3至少n位的数字:^\d{n,}$ 4m-n位的数字:^\d{m,n}$ 5零和非零开头的数字:^(0|[1-9][0-9]*)$ 6非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,......
  • 中台框架模块开发实践-用 Admin.Core 代码生成器生成通用代码生成器的模块代码
    前言之前分享中台Admin.Core的模块代码生成器,陆续也结合群友们的反馈,完善了一些功能和模板上的优化,而本篇将基于此代码生成器生成一个通用代码生成器模块的基本代码后续再在此代码的基础上进行完善,制作一个通用的代码生成器要做一个项目,首先我们要弄清楚需求,这里简单规划了......
  • 正则表达式
    正则表达式目录正则表达式一、正则表达式的概述1、概念2、作用3、可达到的目的二、基础正则1、字符匹配元字符1.2、实例1.2.1.(匹配任意单个字符)1.2.2[](匹配指定范围内的任意单个字符)1.2.3[^]匹配指定范围外的任意单个字符2、表示次数的元字符2.1实例2.1.1*2.1.2.*2......