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探索之实现一个简单的HTTP服务器
Oct 28 Python
python实现发送邮件功能代码
Dec 14 Python
python smtplib模块自动收发邮件功能(二)
May 22 Python
python 借助numpy保存数据为csv格式的实现方法
Jul 04 Python
OpenCV+Python识别车牌和字符分割的实现
Jan 31 Python
python多进程下实现日志记录按时间分割
Jul 22 Python
使用python代码进行身份证号校验的实现示例
Nov 21 Python
python爬虫模拟浏览器的两种方法实例分析
Dec 09 Python
Python for循环与getitem的关系详解
Jan 02 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
Apr 11 Python
OpenCV图像变换之傅里叶变换的一些应用
Jul 26 Python
python可视化之颜色映射详解
Sep 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
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
PHP实现的json类实例
2015/07/28 PHP
JavaScript 拖拉缩放效果
2008/12/10 Javascript
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
很好用的js日历算法详细代码
2013/03/07 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
AngularJS实现网站换肤实例
2021/02/19 Javascript
AngularJS常见过滤器用法实例总结
2017/07/06 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
微信小程序实现滴滴导航tab切换效果
2018/07/24 Javascript
node.js环境搭建图文详解
2018/09/19 Javascript
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
jquery实现进度条状态展示
2020/03/26 jQuery
简介JavaScript错误处理机制
2020/08/04 Javascript
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
Pycharm学习教程(4) Python解释器的相关配置
2017/05/03 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
使用pip安装python库的多种方式
2019/07/31 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
Python 实现递归法解决迷宫问题的示例代码
2020/01/12 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
浅析Python 条件控制语句
2020/07/15 Python
Python字符串三种格式化输出
2020/09/17 Python
C#公司笔试题
2014/03/28 面试题
水果连锁超市创业计划书
2014/01/24 职场文书
幼儿教师研修感言
2014/02/12 职场文书
三年级评语大全
2014/04/23 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
2016党员党课心得体会
2016/01/07 职场文书
检讨书之工作不认真
2019/08/14 职场文书