Python for循环本质
我们先来看一下for循环的一些简单应用:
ls=[1,2,3]
for i in ls:print(i)
我们知道这样可以遍历地取出这里面的每一个元素,但是它的工作原理,我们都是模模糊糊的大概知道是那个样子。其实for循环的工作流程是基于迭代器协议的。为明白他的整个工作流程,我们不得不先看一下迭代器协议。
迭代器协议
1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退)
2.迭代器:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法)
3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象。
注:可以通过__next__取值,就是迭代器
我们接下来就看看,for循环的具体工作过程:
for 循环在处理这些数据前,会调用 __ iter__() 方法,将这些数据转化为一个迭代器,然后调用迭代器的 __ next__() 方法,并捕获StopIteration异常,也就实现了遍历完所有数据就会结束,并不会抛出这个异常。
我们可以用下面的代码来实现for循环的功能:
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
x=[1,2,3]
x_i=x.__iter__()
try:while True:print(x_i.__next__())
except StopIteration:pass
Python for循环本质相关推荐
- python while循环例题_【学习笔记】python:5for循环与while循环(上)
点击上方蓝字,关注我吧 课 程 表 for循环代发格式 for循环的3个要点即是:1.空房间:2.一群等着办业务的人:3.业务流程 空房间的学名叫[元素](item),你可以把它当成是一个变量.那么首 ...
- python无限循环条件循环_Python - 条件控制、循环语句 - 第十二天
Python 条件控制.循环语句 end 关键字 关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符,实例如下: Python 条件语句是通过一条或多条语句的执行结果(True 或 ...
- Python编写循环的两个建议 | 鹅厂实战
作者 | piglei(腾讯高级工程师) 转载自腾讯技术工程知乎专栏 循环是一种常用的程序控制结构.我们常说,机器相比人类的最大优点之一,就是机器可以不眠不休的重复做某件事情,但人却不行.而" ...
- python for 循环中使用 remove 删除列表中的元素
python for 循环中使用 remove 删除列表中的元素 错误的代码 # !/usr/bin/python # encoding: utf-8 # -*- coding: utf8 -*- o ...
- 独家 | 数据科学家的必备读物:从零开始用 Python 构建循环神经网络(附代码)...
作者:Faizan Shaikh 翻译:李文婧 校对:张一豪 本文约4300字,建议阅读10+分钟. 本文带你快速浏览典型NN模型核心部分,并教你构建RNN解决相关问题. 引言 人类不会每听到一个句子 ...
- python哨兵循环_Python通用循环的构造方法实例分析
本文实例讲述了python通用循环的构造方法.分享给大家供大家参考,具体如下: 1.交互循环 是无限循环的一种,允许用户通过交互的方式程序的特定部分: def main(): sum =0.0 cou ...
- python当型循环_对python while循环和双重循环的实例详解
废话不多说,直接上代码吧! #python中,while语句用于循环执行程序,即在某个条件下,循环执行某段程序,以处理需要重复处理的相同任务. #while是"当型"循环结构. i ...
- python for循环删除
python for循环遍历时,能动态删除元素吗?本文讲给你答案. 先来上个代码: # -*- coding:utf-8 -*- list = [1,2,3,4,5,6,7,8]# 使用for 删除某 ...
- python while循环语句-Python While 循环语句
Python While 循环语句 Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务.其基本形式为: while 判断条件(cond ...
最新文章
- Convert函数应用格式化日期
- [记录]-Cortex-A76仅EL0支持aarch32
- 【Java后台】Java执行Python代码的3类5种情况测试【Java源码+Python源码举例】
- MySQL批量update数据(更新的数据值不同)
- pycharm无法导入本地模块问题
- html织梦站内搜索代码,简单三步-实现dede站内搜索功能
- 正则表达式匹配指定的tr标签
- VMware网卡配置
- 【集群仿真】基于matlab固定翼无人机集群仿真演示平台【含Matlab源码 1497期】
- 【友元、异常和其他】——C++ Prime Plus CH15
- matlab 平滑曲线连接_科研画图-率失真曲线图改进:散点连接成曲线并画出原散点的标记点(基于Matlab)...
- 双系统windows+linux如何正确删除linux
- G2、D3 绘制维恩图
- APK文件如何查看源代码
- Firefox设置中文
- 【win10+cuda7.5+cudnn6.0安装caffe⑥】报错及处理方式
- 苹果手机如何分享wifi密码_wifi网速慢被蹭网?用手机一键修改wifi密码,不用求人...
- The Last Samurai 最后的武士**
- Nvidia驱动卸载干净了,新驱动却还是安装不上?
- 年老时最后悔但为时已晚的几件事