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实现识别手写数字 Python图片读入与处理
Mar 23 Python
python射线法判断一个点在图形区域内外
Jun 28 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
Aug 07 Python
Pyspark获取并处理RDD数据代码实例
Mar 27 Python
在python中求分布函数相关的包实例
Apr 15 Python
基于Python中random.sample()的替代方案
May 23 Python
python的pip有什么用
Jun 17 Python
python中round函数保留两位小数的方法
Dec 04 Python
python 基于opencv操作摄像头
Dec 24 Python
Python pandas之求和运算和非空值个数统计
Aug 07 Python
Python调用腾讯API实现人脸身份证比对功能
Apr 04 Python
Pillow图像处理库安装及使用
Apr 12 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
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
php判断电子邮件是否正确方法
2018/12/04 PHP
stripos函数知识点实例分享
2019/02/11 PHP
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
jQuery+css实现的换页标签栏效果
2016/01/27 Javascript
jQuery解决浏览器兼容性问题案例分析
2016/04/15 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
JQuery.dataTables表格插件添加跳转到指定页
2017/06/09 jQuery
vue+swiper实现侧滑菜单效果
2017/12/28 Javascript
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
python 运用Django 开发后台接口的实例
2018/12/11 Python
python3 tkinter实现添加图片和文本
2019/11/26 Python
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
英国票务网站:Ticketmaster英国
2018/08/27 全球购物
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
关键字final的用法
2013/10/02 面试题
c++工程师面试问题
2013/08/04 面试题
配件采购员岗位职责
2013/12/03 职场文书
国际贸易专业个人求职信格式
2014/02/02 职场文书
初中同学聚会邀请函
2014/02/03 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
2014年党的群众路线学习心得体会
2014/11/05 职场文书
群众路线教育实践活动学习笔记内容
2014/11/06 职场文书
安全生产先进个人总结
2015/02/15 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
Python实现为PDF去除水印的示例代码
2022/04/03 Python