Python for循环与getitem的关系详解


Posted in Python onJanuary 02, 2020

这篇文章主要介绍了Python for循环与getitem的关系详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一个类里面如果由__iter__for循环就是找它取,没有的话就会找__getitem__

前面一笔看过没有留心具体的执行情况。

In [169]: class Foo:
   ...:   def __getitem__(self, pos):
   ...:     print(pos)
   ...:     return range(10)[pos]
   ...:
In [172]: for i in f:
   ...:   ...
   ...:   
   ...:                                             
0
1
2
3
4
5
6
7
8
9
10

从代码可以看出,如果没有报错或者设置显式的条件,这个for循环会无线循环。

我现在设置一个显式的设置。

In [173]: class Foo:
   ...:   def __getitem__(self, pos):
   ...:     if pos >5:
   ...:       raise StopIteration
   ...:     print(pos)
   ...:     return range(10)[pos]
   ...:
In [177]: for i in f:
   ...:   ...
   ...:                                             
0
1
2
3
4
5

将错误设置为IndexError也可以执行,但TypeError就不行了。

...:   def __getitem__(self, pos):
   ...:     if pos >5:
   ...:       raise IndexError
   ...:     print(pos)
   ...:     return range(10)[pos]
   ...:                                             
 
In [182]:                                             
 
In [182]: f = Foo()                                        
 
In [183]: for i in f:
   ...:   ...
   ...:                                             
0
1
2
3
4
5

如果用list去运行这个参数会把返回的一个一个元素,装入列表当中:

In [184]: list(f)                                         
0
1
2
3
4
5
Out[184]: [0, 1, 2, 3, 4, 5]

只有__getitem__的类的实例是属于可迭代对象,但用isinstances测试collections.Iterable是不能通过的,书后面介绍可以通过iter函数来测试,如果没报错就说明是可迭代对象,然后生成一个没有__next__属性的迭代器。

In [185]: from collections import Iterable                            
In [186]: isinstance(f, Iterable)                                 
Out[186]: False
 
In [187]: iter(f)                                         
Out[187]: <iterator at 0x114f2be50>
dir(f)                                         
Out[189]:
['__class__',
 '__delattr__',
 '__dict__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__le__',
 '__lt__',
 '__module__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 '__weakref__']

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用面向对象方式创建线程实现12306售票系统
Dec 24 Python
20招让你的Python飞起来!
Sep 27 Python
python 开发的三种运行模式详细介绍
Jan 18 Python
python单线程文件传输的实例(C/S)
Feb 13 Python
python 多个参数不为空校验方法
Feb 14 Python
python3中eval函数用法使用简介
Aug 02 Python
python中调试或排错的五种方法示例
Sep 12 Python
Python tcp传输代码实例解析
Mar 18 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
Apr 22 Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 Python
浅谈Python3中print函数的换行
Aug 05 Python
Python 恐龙跑跑小游戏实现流程
Feb 15 Python
python实现双色球随机选号
Jan 01 #Python
PyTorch实现更新部分网络,其他不更新
Dec 31 #Python
pytorch中的transforms模块实例详解
Dec 31 #Python
Pytorch 实现权重初始化
Dec 31 #Python
pytorch 归一化与反归一化实例
Dec 31 #Python
Pytorch 数据加载与数据预处理方式
Dec 31 #Python
pytorch 数据处理:定义自己的数据集合实例
Dec 31 #Python
You might like
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
php生成zip压缩文件的方法详解
2013/06/09 PHP
动手学习无线电
2021/03/10 无线电
js 编程笔记 无名函数
2011/06/28 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
jQuery阻止同类型事件小结
2013/04/19 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
JS实现图片高亮展示效果实例
2015/11/24 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
2016/01/19 Javascript
JavaScript之数组扁平化详解
2019/06/03 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
python编程开发之类型转换convert实例分析
2015/11/13 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
使用Python正则表达式操作文本数据的方法
2019/05/14 Python
教你一步步利用python实现贪吃蛇游戏
2019/06/27 Python
详解Django 时间与时区设置问题
2019/07/23 Python
Python中six模块基础用法
2019/12/08 Python
python 字段拆分详解
2019/12/17 Python
解决Pytorch训练过程中loss不下降的问题
2020/01/02 Python
无需压缩软件,用python帮你操作压缩包
2020/08/17 Python
浅谈css3中的渐进增强和优雅降级
2017/12/01 HTML / CSS
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
H5 canvas实现贪吃蛇小游戏
2017/07/28 HTML / CSS
枚举与#define宏的区别
2014/04/30 面试题
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
中医学专业自荐信范文
2014/04/01 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
小学生法制教育心得体会
2016/01/14 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android
MySQL慢查询优化解决问题
2022/03/17 MySQL