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 相关文章推荐
一个基于flask的web应用诞生 组织结构调整(7)
Apr 11 Python
PyCharm代码格式调整方法
May 23 Python
Python拼接微信好友头像大图的实现方法
Aug 01 Python
python实现大文本文件分割
Jul 22 Python
python实现日志按天分割
Jul 22 Python
Django实现发送邮件找回密码功能
Aug 12 Python
如何将你的应用迁移到Python3的三个步骤
Dec 22 Python
Python利用for循环打印星号三角形的案例
Apr 12 Python
Python如何使用ConfigParser读取配置文件
Nov 12 Python
神经网络训练采用gpu设置的方式
Mar 03 Python
Python基础之字符串格式化详解
Apr 21 Python
Django中的JWT身份验证的实现
May 07 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
用libtemplate实现静态网页生成
2006/10/09 PHP
php实现用于删除整个目录的递归函数
2015/03/16 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
2017/06/17 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
2014/03/22 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
JS给超链接加确认对话框的方法
2015/02/24 Javascript
常用的JQuery函数及功能小结
2016/03/24 Javascript
JS正则表达式修饰符global(/g)用法分析
2016/12/27 Javascript
JavaScript闭包和回调详解
2017/08/09 Javascript
nodejs爬虫初试superagent和cheerio
2018/03/05 NodeJs
如何使用 vue + d3 画一棵树
2018/12/03 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
Vue.js样式动态绑定实现小结
2019/01/24 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
2020/02/07 Javascript
[01:53]DOTA2超级联赛专访Zhou 五年职业青春成长
2013/05/29 DOTA
Python创建模块及模块导入的方法
2015/05/27 Python
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
Python之多线程爬虫抓取网页图片的示例代码
2018/01/10 Python
基于python实现学生管理系统
2018/10/17 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
python + selenium 刷B站播放量的实例代码
2020/06/12 Python
使用Keras实现Tensor的相乘和相加代码
2020/06/18 Python
python实现简单的tcp 文件下载
2020/09/16 Python
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
html5中使用hotcss.js实现手机端自适配的方法
2020/04/23 HTML / CSS
Cotton On美国网站:澳洲时装连锁品牌
2016/10/25 全球购物
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
性能服装:HYLETE
2018/08/14 全球购物
JSF的标签库有哪些
2012/04/27 面试题
应聘医药代表职位求职信
2013/10/21 职场文书
端午节演讲稿
2014/05/23 职场文书
社区节水倡议书
2015/04/29 职场文书
北京爱情故事观后感
2015/06/12 职场文书