python学习-38迭代器和生成器

迭代器和生成器



---- 迭代器协议和for循环工作机制

1.迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个Stoplteration异常,以终止迭代(只能往后走,不能往前走)
2.可迭代对象:实现了迭代器的对象(如何实现:对象内部定义一个_iter_()方法)
3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如:for循环,sum,min,max函数等)使用迭代器协议访问对象。
dic ={'a':1,'b':2}
iter_d=dic.__iter__()              # 相当于for循环的迭代。 列表,字典,文件等有_iter_()方法的都可以
print(iter_d.__next__())

for循环的本质:循环所有对象,全部都是使用的迭代协议

-for循环机制也可以用while表示

a=[1,2,3,4,5]
iter_a=a.__iter__()
while True:try:print(iter_a.__next__())except StopAsyncIteration:print('迭代完毕,循环终止')break

-迭代器原理

1.

a = [1,2,3,4,5]
iter_a=a.__iter__()          # 切换为迭代器形式print(iter_a.__next__())
print(iter_a.__next__())
print(iter_a.__next__())
print(iter_a.__next__())
print(iter_a.__next__())

运行结果:

1
2
3
4
5Process finished with exit code 0

2.用next方法

a = [1,2,3,4,5]
iter_a=a.__iter__()          # 切换为迭代器形式print(next(iter_a))
print(next(iter_a))
print(next(iter_a))
print(next(iter_a))
print(next(iter_a))

 

运行结果是一样的

 

只要遵循迭代器协议,那就是可迭代对象。

 

 

 

------ 初识生成器

 

可以理解为一种数据类型。这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的_iter_方法),所以生成器就是可迭代对象。

 

--生成器表现形式:

1.生成器函数

 

def test():yield 1
g=test()
print(g)      # 生成器内存地址
print(g.__next__())

运行结果:

<generator object test at 0x0000023EBB890B10>1Process finished with exit code 0

 

2.生成器表达式

res=(i for i in range(11))
print(res.__next__())
print(res.__next__())

运行结果:

0
1Process finished with exit code 0

 

ps:

三元表达式

name='john'
res='1' if name == 'john' else'2'  #如果name='john',返回1,不是则返回2
print(res)

运行结果:

1Process finished with exit code 0

 

转载于:https://www.cnblogs.com/liujinjing521/p/11193880.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448300.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转载]基于Aaf的数据拆分

(本文适于使用Aaf框架的开发者阅读) 1. 基本原理 在Aaf框架中&#xff0c;“对象”和“存储”的关系映射有一个关键的纽带StorageAlias&#xff0c;即“存储别名”&#xff0c;同样一个类型&#xff0c;在不同的存储别名下&#xff0c;可以自由映射到任意存储“位置”。  “位…

靠边停车

什么是靠边停车 靠边停车是大路考中一个指标很明确的考核项目&#xff0c;要求学员驾驶车辆使之靠边停下。 操作方法 1、停车前&#xff0c;要通过内、外后视镜观察后方和右侧交通情况&#xff0c;开右转向灯。 2、适量踩下制动踏板。 3、向右转动方向盘(第一把轮…

RuntimeException 和 Exception 区别、异常的子父级关系

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.java 将所有的错误封装为一个对象&#xff0c;其根本父类为Throwable, Throwable 有两个子类&#xff1a;Error 和 Exception。 2.Err…

通过路口

操作方法 1、让车减速 2、观察路口的情况 3、通过路口 注意事项 1、不要抢黄灯 2、不要开英雄车&#xff0c;即红灯亮起时通过路口的最后一辆车 3、控制车速&#xff0c;控制在50km/h以下 4、看到左右车都减速时&#xff0c;也马上减速 5、要左转…

C语言笔记(关键字)

gdb调试 gcc 源程序 -g&#xff1b;加gdb调试信息gdb可执行程序&#xff1b;&#xff08;gdb调试&#xff09;l&#xff08;ist&#xff09;&#xff1a;查看源码&#xff0c;按一下从main开始10行以此往后l n&#xff1a;查看n处上下10行的源码run&#xff1a;运行程序b&…

自定义 Git - Git 钩子 (自动部署)

Git 钩子 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 和其它版本控制系统一样&#xff0c;Git 能在特定的重要动作发生时触发自定义脚本。 有两组这样的钩子&#xff1a;客户端的和…

变更车道

操作方法 1、观察与判断观察车辆后方、侧方和准备变更的车道上的交通流情况&#xff1b; 2、确认安全后&#xff0c;打开转向指示灯示意&#xff0c;并再次通过后视镜观察两侧道路上有无车辆超越&#xff0c;确认准备驶入的车道是否允许留有安全距离&#xff1b; 3…

C语言笔记(符号)

注释符号 几个似非而是的注释问题 例子&#xff1a; (A) int / * ... * /i; (B) char * s "abcdefgh //hijklmn"; (C) //Is it a \valid comment? (D) in/ * ... * /t i; 我们知道C语言里可以有两种注释方式&#xff1a;“/* */” 和 “ // ”。那么上面几条…

直线行驶

考核要求 保证跟车安全速度和安全距离&#xff0c;了解车辆行驶速度、注意观察路面状况&#xff0c;采取相应措施。不能有左右摆动、方向不稳的现象。 考试口诀 一.寻找中心 二.双眼锁定本车能通行的中心 三.心理想着走中间 四.双眼从本车前面最突出点的.中心…

java 命令: jmap 命令使用 ( 查看内存使用、设置 )

jdk安装后会自带一些小工具&#xff0c;jmap命令(Java Memory Map)是其中之一。主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。 jmap命令可以获得运行中的jvm的堆的快照&#xff0c;从而可以离线分析堆&#xff0c;以检查内存泄漏&am…

第一节 接口概述 [转贴]

接口&#xff08;interface&#xff09;用来定义一种程序的协定。实现接口的类或者结构要与接口的定义严格一致。有了这个协定&#xff0c;就可以抛开编程语言的限制&#xff08;理论上&#xff09;。接口可以从多个基接口继承&#xff0c;而类或结构可以实现多个接口。接口可以…

获取本机用户名、MAC地址、IP地址、硬盘ID、CPU序列号、系统名称、物理内存

我们在利用C#开发桌面程序&#xff08;Winform&#xff09;程序的时候&#xff0c;经常需要获取一些跟系统相关的信息&#xff0c;例如用户名、MAC地址、IP地址、硬盘ID、CPU序列号、系统名称、物理内存等。 首先需要引入命名空间&#xff1a; using System.Management; //…

只用一套解决方案,就可解决80%的交通物流行业信息难题

行业背景 新中国成立70多年来&#xff0c;中国交通运输总体上已经形成了多节点、全覆盖的综合运输网络&#xff0c;“五纵五横”综合运输大通道基本贯通&#xff0c;一大批综合客运、货运枢纽站场&#xff08;物流园区&#xff09;投入运营&#xff0c;取得了一系列瞩目成果&am…

起步

什么是开车起步 起步&#xff0c;即发动汽车&#xff0c;使汽车开始走动。 操作方法 1、“踩”离合器 2、“挂”一档 3、“打”左转向灯&#xff08;提醒后车驾驶员注意安全避让&#xff09; 4、“鸣”号&#xff08;引起车辆周围的行人或机动车等注意&…

Linux 使用 jstat 命令查看 jvm 的 GC 情况

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Options&#xff0c;选项&#xff0c;我们一般使用 -gcutil 查看gc情况 vmid&#xff0c;VM的进程号&#xff0c;即当前运行的java进程号…

WKWebview加载本地图片时出现路径问题

出现问题情况是&#xff1a;将uiwebview换成wkwebview之后&#xff0c;之前将webview上那些图片放回本地下载后缓存的图片没办法在webview上找到&#xff0c;最后排查出原因是&#xff0c;wkwebview需要将图片和网页文件放在同个路径下。 具体实现方法如下(获取图片缓存的路径&…

上车准备

上车准备一 1、环视车辆、确保安全。 2、调整驾驶座。身体坐正&#xff0c;双手向前伸直&#xff0c;以手腕刚好能放在方向盘上为准。左脚搁在离合器上&#xff0c;右脚搁在刹车上&#xff0c;小腿和大腿成90度。左脚可以轻松把离合器踩到底。身体离方向盘20—25厘米。 …

C++复习

register关键字请求“编译器”将局部变量存储于寄存器中 C语言中无法取得register变量地址 在C中依然支持register关键字 1、C编译器有自己的优化方式&#xff0c;不使用register也可能做优化 2、C中可以取得register变量的地址 C编译器发现程序中需要取register变量的地址…

Docker 方式安装 Nginx 、阿里云服务器上装 Ngnix

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 非 Docker 方式安装&#xff0c;直接 Linux 安装见另一文&#xff1a;Linux 上 安装 nginx 、阿里云服务器上安装 nginx 1. 直接从镜像仓…

C#实现A*算法

理解A*寻路算法具体过程 这两天研究了下 A* 寻路算法, 主要学习了这篇文章, 但这篇翻译得不是很好, 我花了很久才看明白文章中的各种指代. 特写此篇博客用来总结, 并写了寻路算法的代码, 觉得有用的同学可以看看. 另外因为图片制作起来比较麻烦, 所以我用的是原文里的图片. 当…