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开发vim插件及心得分享
Nov 04 Python
Python 中的 else详解
Apr 23 Python
Python批量更改文件名的实现方法
Oct 29 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
Apr 18 Python
pandas多级分组实现排序的方法
Apr 20 Python
用django设置session过期时间的方法解析
Aug 05 Python
python实现证件照换底功能
Aug 20 Python
python 数据提取及拆分的实现代码
Aug 26 Python
基于python实现从尾到头打印链表
Nov 02 Python
Python timer定时器两种常用方法解析
Jan 20 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
Feb 07 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
Mar 20 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
几个学习PHP的网址
2006/11/25 PHP
浅析SVN常见问题及解决方法
2013/06/21 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
php使用GD2绘制几何图形示例
2017/02/15 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
2013/01/04 Javascript
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
javascript实现带节日和农历的日历特效
2015/02/01 Javascript
最简单的tab切换实例代码
2016/05/13 Javascript
简单的分页代码js实现
2016/05/17 Javascript
JavaScript数组的栈方法与队列方法详解
2016/05/26 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
JavaScript数组复制详解
2017/02/02 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
JavaScript&quot;模拟事件&quot;的注意要点详解
2019/02/13 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
Python爬虫常用库的安装及其环境配置
2018/09/19 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
pytorch中index_select()的用法详解
2021/01/06 Python
基于HTML5 WebGL的3D机房的示例
2018/03/16 HTML / CSS
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
腾讯技术类校园招聘笔试试题
2014/05/06 面试题
电子商务专员岗位职责
2013/12/11 职场文书
工作交流会欢迎词
2014/01/12 职场文书
给男朋友的道歉信
2014/01/12 职场文书
美德好少年主要事迹
2014/01/29 职场文书
护士毕业生自荐信
2014/02/07 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
2014年工程工作总结
2014/11/25 职场文书
紧急通知
2015/04/17 职场文书
学校党员干部承诺书
2015/05/04 职场文书
2016小学教师读书心得体会
2016/01/13 职场文书
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL