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 相关文章推荐
django之常用命令详解
Jun 30 Python
python如何实现int函数的方法示例
Feb 19 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
May 24 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
May 27 Python
Tensorflow训练模型越来越慢的2种解决方案
Feb 07 Python
pytorch实现Tensor变量之间的转换
Feb 17 Python
pygame实现弹球游戏
Apr 14 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 Python
Python 整行读取文本方法并去掉readlines换行\n操作
Sep 03 Python
python中Mako库实例用法
Dec 31 Python
python 制作本地应用搜索工具
Feb 27 Python
pytorch中[..., 0]的用法说明
May 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
ThinkPHP中数据操作案例分析
2015/09/27 PHP
PHP简单实现上一页下一页功能示例
2016/09/14 PHP
PHP钩子与简单分发方式实例分析
2017/09/04 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
JQuery UI皮肤定制
2009/07/27 Javascript
JavaScript 事件的一些重要说明
2009/10/25 Javascript
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
js+html制作简单验证码
2017/02/16 Javascript
Bootstrap fileinput组件封装及使用详解
2017/03/10 Javascript
JS简单生成随机数(随机密码)的方法
2017/05/11 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
vue+Java后端进行调试时解决跨域问题的方式
2017/10/19 Javascript
vue项目引入Iconfont图标库的教程图解
2018/10/24 Javascript
js实现搜索栏效果
2018/11/16 Javascript
ES6知识点整理之对象解构赋值应用示例
2019/04/17 Javascript
一则python3的简单爬虫代码
2014/05/26 Python
Python写的一个简单监控系统
2015/06/19 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
python TKinter获取文本框内容的方法
2018/10/11 Python
Python库安装速度过慢解决方案
2020/07/14 Python
python写文件时覆盖原来的实例方法
2020/07/22 Python
Python实现数字的格式化输出
2020/08/01 Python
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
英国蜡烛、蜡烛配件和家居香氛购买网站:Yankee Candle
2018/12/12 全球购物
央视元宵晚会主持串词
2014/03/25 职场文书
企业整改报告范文
2014/11/08 职场文书
行政答辩状范文
2015/05/21 职场文书
关于Spring配置文件加载方式变化引发的异常详解
2022/01/18 Java/Android
解决Mysql报错 Table 'mysql.user' doesn't exist
2022/05/06 MySQL
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers
python数字图像处理实现图像的形变与缩放
2022/06/28 Python