特殊方法----getitem()

Python的特殊方法__getitem_() 主要作用是可以让对象实现迭代功能。我们通过一个实例来说明。

定义一个Sentence类,通过索引提取单词。

import re
RE_WORD = re.compile(r'\w+')
class Sentence:def __init__(self, text):self.text = textself.words = RE_WORD.findall(text)  # re.findall函数返回一个字符串列表,里面的元素是正则表达式的全部非重叠匹配def __getitem__(self, index):return self.words[index]
  • 测试
>>> s = Sentence('The time has come')
>>> for word in s:print(word)Thetimehascome
>>> s[0]'The'
>>> s[1]'time'

通过测试发现,示例 s 可以正常迭代。但是没有定义 getitem() 测试则会报错, TypeError: '***' object is not iterable

序列可以迭代

我们都知道序列是可以迭代,下面具体说明原因。

解释器需要迭代对象x时, 会自动调用iter(x)方法。内置的 iter(x) 方法有以下作用

  1. 检查对象是否实现了__inter__ 方法,如果实现了就调用它(也就是我们偶尔用到的特殊方法重载),获取一个迭代器。
  2. 如果没有实现iter()方法, 但是实现了 __getitem__方法,Python会创建一个迭代器,尝试按顺序(从索引0开始,可以看到我们刚才是通过s[0]取值)获取元素。
  3. 如果尝试失败,Python抛出TypeError异常,通常会提示TypeError: '***' object is not iterable

任何Python序列都可迭代的原因是,他们都实现了__getitem__方法。其实,标准的序列也都实现了 __iter__方法。

注意: 从python3.4 开始,检查对象x能否迭代,最准确的方法是: 调用iter(x)方法,如果不可迭代,在处理TypeError异常。这比使用isinstance(x,abc.Iterable)更准确,因为iter()方法会考虑到遗留的__getitem__()方法,而abc.Iterable类则不考虑。

python中的特殊方法 __getitem__()相关推荐

  1. python深度讲解_《深度剖析CPython解释器》21. Python类机制的深度解析(第五部分): 全方位介绍Python中的魔法方法,一网打尽...

    楔子 下面我们来看一下Python中的魔法方法,我们知道Python将操作符都抽象成了一个魔法方法(magic method),实例对象进行操作时,实际上会调用魔法方法.也正因为如此,numpy才得以 ...

  2. python 中的魔术方法 getitem setitem

    python 中的魔术方法 getitem setitem https://docs.python.org/3/reference/datamodel.html?highlight=iter#obje ...

  3. python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法

    python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法 目录

  4. python使用方法-在Python中使用next()方法操作文件的教程

    next()方法当一个文件被用作迭代器,典型例子是在一个循环中被使用,next()方法被反复调用.此方法返回下一个输入行,或引发StopIteration异常EOF时被命中. 与其它文件的方法,如Re ...

  5. python中range 10 0_如何在python中使用range方法

    如何在python中使用range方法 发布时间:2021-01-05 16:55:23 来源:亿速云 阅读:94 作者:Leah 如何在python中使用range方法?很多新手对此不是很清楚,为了 ...

  6. Python中sys.argv方法的一些典型用法

    本文整理汇总了Python中sys.argv方法的典型用法代码示例. 示例1: weather_icons # 需要导入模块: import sys [as 别名] # 或者: from sys im ...

  7. python中函数和方法的区别

    本篇内容主要介绍从几个维度来介绍下python中函数和方法的区别: 首先,从分类的角度来分析. (1)函数的分类: 内置函数:python内嵌的一些函数. 匿名函数:一行代码实现一个函数功能. 递归函 ...

  8. python脚本怎么使用_在Python中使用next()方法操作文件的教程

    next()方法当一个文件被用作迭代器,典型例子是在一个循环中被使用,next()方法被反复调用.此方法返回下一个输入行,或引发StopIteration异常EOF时被命中. 与其它文件的方法,如Re ...

  9. Python 中的特殊方法(定制类):__str__、__cmp__、__len__、数学运算、类型转换、@property运用、__slots__和__call__函数

    Python中的特殊方法 Python的特殊方法定义在 class中,不需要直接进行显示调用,Python的某些操作符或者函数会自动调用对应的特殊方法.这些方法如:__str__().__len__( ...

最新文章

  1. python3.6.2安装教程-CentOS 7.2下安装Python 3.6.2
  2. VC学习笔记---ATL MFC CLR三个库的区别
  3. Python-面向对象编程
  4. malloc()背后的实现原理——内存池
  5. array_merge与array+array的区别
  6. python中怎么表示整数的点称为整点_智慧职教云课堂APPPython程序设计基础答案公众号...
  7. 大剑无锋之不都说面试不问mybatis,为什么我被虐了。。。【mybatis面试题】
  8. python 12306 车次数据获取
  9. 统计一行文本的单词个数_word操作技巧:不同情况的文字统计方法
  10. autocomplete 属性 清除input框输入存留历史值,防止下拉历史值显示
  11. Django echarts初试随笔
  12. hunnu11543:小明的烦恼——分糖果
  13. matlab compass函数,Matlab基本函数-compass函数 | 学步园
  14. 数据结构课程设计题目
  15. java的帮助文档(API)
  16. 单纯形法的四种特殊情形
  17. h5将word转为html,怎么把Word版通知转化成H5版
  18. Django~1 一 什么是web框架?
  19. ECNU 梵高先生 3529 JAVA
  20. Acrel-1200分布式光伏运维平台

热门文章

  1. OPPO R17系列
  2. 基于强化学习的质量AI在淘系互动业务的实践之路
  3. 音视频学习之闲看视频整理低延迟
  4. Ubuntu20.04无法调节亮度问题(尝试各种方法后最终通过升级内核解决)
  5. 物流交通大数据平台-物流时效分析(二)
  6. 提灯照暗,向内自省——《中国文化的深层结构》读书笔记3800字
  7. VBA—EXCEL操作集合—06
  8. 信创终端访问群晖NAS服务器
  9. 小虎卫手机远控效果演示:电脑远程控制手机
  10. 算法修炼之练气篇——练气十九层