python中的特殊方法 __getitem__()
特殊方法----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)
方法有以下作用
- 检查对象是否实现了
__inter__
方法,如果实现了就调用它(也就是我们偶尔用到的特殊方法重载),获取一个迭代器。 - 如果没有实现
iter()
方法, 但是实现了__getitem__
方法,Python会创建一个迭代器,尝试按顺序(从索引0开始,可以看到我们刚才是通过s[0]取值)获取元素。 - 如果尝试失败,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__()相关推荐
- python深度讲解_《深度剖析CPython解释器》21. Python类机制的深度解析(第五部分): 全方位介绍Python中的魔法方法,一网打尽...
楔子 下面我们来看一下Python中的魔法方法,我们知道Python将操作符都抽象成了一个魔法方法(magic method),实例对象进行操作时,实际上会调用魔法方法.也正因为如此,numpy才得以 ...
- python 中的魔术方法 getitem setitem
python 中的魔术方法 getitem setitem https://docs.python.org/3/reference/datamodel.html?highlight=iter#obje ...
- python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法
python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法 目录
- python使用方法-在Python中使用next()方法操作文件的教程
next()方法当一个文件被用作迭代器,典型例子是在一个循环中被使用,next()方法被反复调用.此方法返回下一个输入行,或引发StopIteration异常EOF时被命中. 与其它文件的方法,如Re ...
- python中range 10 0_如何在python中使用range方法
如何在python中使用range方法 发布时间:2021-01-05 16:55:23 来源:亿速云 阅读:94 作者:Leah 如何在python中使用range方法?很多新手对此不是很清楚,为了 ...
- Python中sys.argv方法的一些典型用法
本文整理汇总了Python中sys.argv方法的典型用法代码示例. 示例1: weather_icons # 需要导入模块: import sys [as 别名] # 或者: from sys im ...
- python中函数和方法的区别
本篇内容主要介绍从几个维度来介绍下python中函数和方法的区别: 首先,从分类的角度来分析. (1)函数的分类: 内置函数:python内嵌的一些函数. 匿名函数:一行代码实现一个函数功能. 递归函 ...
- python脚本怎么使用_在Python中使用next()方法操作文件的教程
next()方法当一个文件被用作迭代器,典型例子是在一个循环中被使用,next()方法被反复调用.此方法返回下一个输入行,或引发StopIteration异常EOF时被命中. 与其它文件的方法,如Re ...
- Python 中的特殊方法(定制类):__str__、__cmp__、__len__、数学运算、类型转换、@property运用、__slots__和__call__函数
Python中的特殊方法 Python的特殊方法定义在 class中,不需要直接进行显示调用,Python的某些操作符或者函数会自动调用对应的特殊方法.这些方法如:__str__().__len__( ...
最新文章
- python3.6.2安装教程-CentOS 7.2下安装Python 3.6.2
- VC学习笔记---ATL MFC CLR三个库的区别
- Python-面向对象编程
- malloc()背后的实现原理——内存池
- array_merge与array+array的区别
- python中怎么表示整数的点称为整点_智慧职教云课堂APPPython程序设计基础答案公众号...
- 大剑无锋之不都说面试不问mybatis,为什么我被虐了。。。【mybatis面试题】
- python 12306 车次数据获取
- 统计一行文本的单词个数_word操作技巧:不同情况的文字统计方法
- autocomplete 属性 清除input框输入存留历史值,防止下拉历史值显示
- Django echarts初试随笔
- hunnu11543:小明的烦恼——分糖果
- matlab compass函数,Matlab基本函数-compass函数 | 学步园
- 数据结构课程设计题目
- java的帮助文档(API)
- 单纯形法的四种特殊情形
- h5将word转为html,怎么把Word版通知转化成H5版
- Django~1 一 什么是web框架?
- ECNU 梵高先生 3529 JAVA
- Acrel-1200分布式光伏运维平台