这篇文章主要介绍了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]:

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 getitem_Python for循环与getitem的关系详解相关推荐

  1. python中getitem_Python类中方法getitem和getattr详解

    1.getitem 方法 使用这个方法最大的印象就是调用对象的属性可以像字典取值一样使用中括号['key'] 使用中括号对对象中的属性进行取值.赋值或者删除时,会自动触发对应的__getitem__. ...

  2. Python 中的循环与 else

    1. 含义 Python 中的循环与 else 有以下两种形式 for - else while - else Python中的 for.while 循环都有一个可选(optional)的 else ...

  3. Python中For循环与While 循环的使用

    Python中For循环与While 循环的使用 For循环在枚举中使用: Continue和Break在For循环中的使用: 举例: For 循环与While 循环区别: break语句在While ...

  4. python语言中with as的用法使用详解

    本篇文章主要介绍了python语言中with as的用法使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 With语句是什么? 有一些任务,可能事先需要设置,事后做 ...

  5. 好程序员前端教程之JavaScript闭包和匿名函数的关系详解...

    好程序员前端教程之JavaScript闭包和匿名函数的关系详解 本文讲的是关于JavaScript闭包和匿名函数两者之间的关系,从匿名函数概念到立即执行函数,最后到闭包.下面一起来看看文章分析,希望你 ...

  6. Python中的list/tuple/dict/set数据类型详解

    Python中的list/tuple/dict/set数据类型详解 Python内部内置了一些数据类型与结构,可以方便在编程时候的使用. list List存储一系列的有序集合,并且元素内容可变(可更 ...

  7. 区块链用哪种语言 Java_区块链开发用什么语言呢?区块链与编程语言的关系详解...

    原标题:区块链开发用什么语言呢?区块链与编程语言的关系详解 区块链的概念就随着比特币的大热开始逐渐进入公众视野,比特币的拥有者为了使其创造更高的财富,开始疯狂炒作,因而引发购买比特币大浪潮.然而等到比 ...

  8. python中的打印是什么意思_对python:print打印时加u的含义详解

    对python:print打印时加u的含义详解 u:表示unicode字符串 不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行unicode编码. 一般英文字符在使用各种编码下, 基本都 ...

  9. Python必备基本技能——命令行参数args详解

    Python必备基本技能--命令行参数args详解 1. 效果图 2. 源码 2.1 简单命令行参数 2.1 轮廓检测源代码 参考 这篇博客将介绍一项开发人员.工程师和计算机科学家必备的技能--命令行 ...

最新文章

  1. spring boot项目之mybatis注解方式的使用
  2. javascript模拟鼠标双击事件
  3. SpringBoot单元测试运行时报错:Failed to load ApplicationContext
  4. 扩展Linux分区的一种方法
  5. 信息学奥赛一本通 1008:计算(a+b)/c的值 | OpenJudge NOI 1.3 03
  6. Oracle误操作--被提交后的数据回退(闪回)
  7. import xxx from 和 import {xxx} from的区别
  8. GStreamer入门概念(二)
  9. GoWeb开发_Iris框架讲解(二):Get、Post、Put等请求及数据返回格式
  10. 使用开票组件快速开具清单发票
  11. Unity编辑器工具简体繁体一键转换
  12. SAP成都研究院飞机哥:程序猿和飞机的不解之缘
  13. 讯飞语音包实现Android语音识别
  14. HTML5 小练习1—仿MPG游戏商城
  15. iframe是什么?html中iframe标签的用法详解
  16. github服务器在美国吗_GitHub上的政府布道者介绍美国开放技术
  17. 使用Mindstudio进行Pytorch模型量化压缩
  18. 开放平台回顾与前景展望
  19. 武汉最最最牛逼的 IT 公司全在这了
  20. mysql建立司机表,MYSQL进阶,生手变司机

热门文章

  1. 关键词排名优化,按天扣费系统源码,快排系统源代码,快排软件介绍
  2. 沿任意轴旋转及其推导
  3. Shiro权限管理详解(授权和注解开发)【面试点】
  4. win10 1050显卡torch调用不到GPU问题处理
  5. 电工与电子技术实验——RLC串联谐振电路
  6. Fifth-自动旋转和自动调整大小
  7. mysql8查看用户密码_mysql8用户管理
  8. 《地理坐标(经纬度坐标)和屏幕坐标(xy坐标)间的转换》的读后笔记
  9. 普元EOS之我要配置数据源或更换数据库
  10. 交通领域主要SCI期刊——2018年JCR