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 相关文章推荐
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
Dec 27 Python
Python实现一个简单的验证码程序
Nov 03 Python
python 字典中取值的两种方法小结
Aug 02 Python
在python 不同时区之间的差值与转换方法
Jan 14 Python
Python字典遍历操作实例小结
Mar 05 Python
python将字典列表导出为Excel文件的方法
Sep 02 Python
Python.append()与Python.expand()用法详解
Dec 18 Python
Python matplotlib修改默认字体的操作
Mar 05 Python
python网络编程socket实现服务端、客户端操作详解
Mar 24 Python
pandas之分组groupby()的使用整理与总结
Jun 18 Python
基于K.image_data_format() == 'channels_first' 的理解
Jun 29 Python
python 实现体质指数BMI计算
May 26 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
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
怎么清空javascript数组
2013/05/11 Javascript
js弹窗返回值详解(window.open方式)
2014/01/11 Javascript
jquery如何判断表格同一列不同行input数据是否重复
2014/05/14 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
第十章之巨幕页头缩略图与警告框组件
2016/04/25 Javascript
BootStrap Fileinput初始化时的一些参数
2016/12/30 Javascript
jQuery.Form上传文件操作
2017/02/05 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
教你使用vue-cli快速构建的小说阅读器
2019/05/13 Javascript
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
JSON 入门教程基础篇 json入门学习笔记
2020/09/22 Javascript
javascript实现点击小图显示大图
2020/11/29 Javascript
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
Python HTTP下载文件并显示下载进度条功能的实现
2020/04/02 Python
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
SVG实现多彩圆环倒计时效果的示例代码
2017/11/21 HTML / CSS
小程序canvas中文字设置居中锚点
2019/04/16 HTML / CSS
材料化学应届生求职信
2013/10/09 职场文书
心得体会开头
2014/01/01 职场文书
导师评语大全
2014/04/26 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
全国法制宣传日活动总结
2015/05/05 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书
人力资源部工作计划
2019/05/14 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python
SQL基础查询和LINQ集成化查询
2022/01/18 MySQL
Python OpenCV实现图像模板匹配详解
2022/04/07 Python