python中for循环的底层实现机制 迭代
在python中,存在2种循环方式:for循环和while循环。
while循环的实现很简单, 其本质就是一个条件语句,自定义条件,当条件满足的时候,不断执行while代码块。
但是for循环,究竟是怎么回事呢?说到for循环,那么就不能不讲到迭代了
迭代
python中迭代对象分2种:迭代器对象(Iterator)、可迭代对象(Iterable)。
tips:如何判断一个对象是迭代器对象还是可迭代对象?
from collections import Iterable, Iterator
isinstance(object, class),第一个参数为对象,第二个参数为类名;返回值为True,即对象为
1.可迭代对象
很多python的数据类型都是可迭代对象:列表、字典、元组、字符串等
a = [1, 2, 3]
isinstance(a, Iterable) # True
注意:可迭代对象,并不是迭代器对象
2.迭代器对象
迭代器对象依赖iter(args)方法来实现,参数args必须是一个可迭代对象
a = [1, 2, 3]
b = iter(a)
isinstance(b, Iterator) # True
isinstance(b, Iterable) # True
由此可以看出,迭代器对象,同时也是可迭代对象
那么,这2个对象,到底和for循环的关系在哪里呢?
for循环
我们都知道,迭代器对象,实现了__next__()方法,可以不断调用该方法,返回迭代器对象的每个元素
for循环的对象,必须是可迭代对象。而在底层,所有的可迭代对象均内置了__iter__()方法,返回值为迭代器对象。
此时,我们便明了了,for循环本质上调用了可迭代对象的__iter__()方法,得到了该对象对应的迭代器对象,然后无限调用__next__()方法,得到对象中的每一个元素。直到StopIteration异常,代表迭代器中已无下一个元素,for循环自动处理该异常,跳出循环。
python中for循环的底层实现机制 迭代的更多相关文章
- 详解Python中的循环语句的用法
一.简介 Python的条件和循环语句,决定了程序的控制流程,体现结构的多样性.须重要理解,if.while.for以及与它们相搭配的 else. elif.break.continue和pass语句 ...
- python中的循环和编码,运算符, 格式化输出
1.while循环 现在让我们来看看python中的while循环 格式为 while 条件 循环体 (break) (continue) 中断循环的关键字有break和continue, brea ...
- python 中 for 循环 if循环 break
python中最基本的语法格式大概就是缩进了.python中常用的循环:for循环,if循环.一个小游戏说明for,if ,break的用法. 猜数字游戏: 1.系统生成一个20以内的随机数 2.玩家 ...
- 一文了解Python中的循环(for while break continue 嵌套循环...)
循环 目标 程序的三大流程 while 循环基本使用 break 和 continue while 循环嵌套 01. 程序的三大流程 在程序开发中,一共有三种流程方式: 顺序 —— 从上向下,顺序执行 ...
- python中的循环以及,continue和break的使用
循环 目标 程序的三大流程 while 循环基本使用 break 和 continue while 循环嵌套 01. 程序的三大流程 在程序开发中,一共有三种流程方式: 顺序 —— 从上向下,顺序执行 ...
- python中while循环和for循环的定义和详细的使用方法
1. 循环的定义,反复做某事,具有明确的开始和结束. 2. 在Python中循环有while和for两种方式: While循环:1) 语法结构 >>> while 条件: ... ...
- Python中的循环语句
Python中有while循环和for循环 下面以一个小例子来说明一下用法,用户输入一些数字,输出这些数字中的最大值和最小值 array = [5,4,3,1] for i in array: pri ...
- for和while——python中的循环控制语句详解
循环语句在绝大多数的语言中,都是必不可少的一种控制语句,循环语句允许我们执行一个语句或语句组多次.在python中有for循环和while循环两种,讲到这里,就不得不提到我们的迭代器对象 迭代器 迭代 ...
- Python中的循环与跳出
--start-- for循环: for i in range(3): user_input = input("Your username:") passwd = int(inpu ...
随机推荐
- 集合00_Java集合框架
集合类概述 1.继承树 2.集合和数组 区别如下: 数组可以存储基本数据类型,也可以存储引用类型:而集合只能存储引用类型(比如存储int,它会自动装箱成Integer) 数组长度固定,集合长度可变 3 ...
- 论文笔记:Learning Dynamic Memory Networks for Object Tracking
Learning Dynamic Memory Networks for Object Tracking ECCV 2018Updated on 2018-08-05 16:36:30 Paper: ...
- -第2章 JS方法实现下拉菜单显示和隐藏
知识点 onmouseover 鼠标经过 onmouseout 鼠标移出 function 关键字 getElementsByTagName 获取一组标签 length 获取对象成员个数 思路 给一级 ...
- 2、zabbix工作原理及安装配置
Zabbix架构:zabbix基本术语.zabbix安装.配置和应用 Zabbix架构中的组件: zabbix-server:C语言 zabbix-server和zabbix-agent通过 ...
- C# 缓存操作类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- _map
地图属性控制表 comment 备注 Map 地图ID,.gps第一个参数 Zone 区域ID,.gps第二个参数,整个地图时填0 Area 地域ID,.gps第三个参数,整个地图或区域时填0 Cha ...
- 【一】jquery之subline编辑器插件安装
1.地址下载:https://pan.baidu.com/share/link?shareid=552312&uk=151954025 2.打开Sublime, 选择 Prefreences ...
- Springboot Thymeleaf 发邮件 将html内容展示在邮件内容中
- Python 函数也是一种对象
函数也是一种对象 func = lambda x, y: x+y print func(3, 4) def func(x, y): return x+y print func(3, 4) 效果相同. ...
- 越来越“简单”的Java
Java,20岁了.从我写下第一行Java代码,迄今已有十余年了,眼见Java——这个当年刚刚找到自己成长方向的懵懂少年,成长为如今当之无愧的业界王者.它已拥有世界上最庞大的开发者社区,以及无可匹敌的 ...