最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

详解Python中的__getitem__方法与slice对象的切片操作

来源:动视网 责编:小采 时间:2020-11-27 14:29:08
文档

详解Python中的__getitem__方法与slice对象的切片操作

详解Python中的__getitem__方法与slice对象的切片操作:Fib实例虽然能作用于for循环,看起来和list有点像,但是,把它当成list来使用还是不行,比如,取第5个元素: >>> Fib()[5] Traceback (most recent call last): File , line 1, in TypeError: 'Fib' object does
推荐度:
导读详解Python中的__getitem__方法与slice对象的切片操作:Fib实例虽然能作用于for循环,看起来和list有点像,但是,把它当成list来使用还是不行,比如,取第5个元素: >>> Fib()[5] Traceback (most recent call last): File , line 1, in TypeError: 'Fib' object does


Fib实例虽然能作用于for循环,看起来和list有点像,但是,把它当成list来使用还是不行,比如,取第5个元素:

>>> Fib()[5]
Traceback (most recent call last):
 File "", line 1, in 
TypeError: 'Fib' object does not support indexing

要表现得像list那样按照下标取出元素,需要实现__getitem__()方法:

class Fib(object):
 def __getitem__(self, n):
 a, b = 1, 1
 for x in range(n):
 a, b = b, a + b
 return a

现在,就可以按下标访问数列的任意一项了:

>>> f = Fib()
>>> f[0]
1
>>> f[1]
1
>>> f[2]
2
>>> f[3]
3
>>> f[10]
89
>>> f[100]
573147844013817084101

slice对象与__getitem__

想要使类的实例像列表一样使用下标, 可以设置__getitem__方法。比如:

class _List(object):

 def __getitem__(self, key):
 print key

l = _List()
l[3] # print 3

但是如果想要使用切片操作的

l[1:4] # print slice(1, 4, None)

会创建一个slice对象用于切片, 可以通过help(slice)查看具体操作。

a = slice(1, 4, None)

range(5)[a] # print [1, 2, 3]

更加丰富的操作

class _List(object):
 
 def __init__(self, _list):
 self._list = _list

 def __getitem__(self, key):
 if isinstance(key, int):
 return self._list[key]
 elif isinstance(key, slice):
 reutrn self.__class__(self._list[key])

if __name__ == '__main__':
 c = _List(range(10))
 b = c[1:5]
 print b[3] # print 4

如果key是一个整形的话就返回列表元素,如果是一个slice对象的话,就创建一个实例并返回。

文档

详解Python中的__getitem__方法与slice对象的切片操作

详解Python中的__getitem__方法与slice对象的切片操作:Fib实例虽然能作用于for循环,看起来和list有点像,但是,把它当成list来使用还是不行,比如,取第5个元素: >>> Fib()[5] Traceback (most recent call last): File , line 1, in TypeError: 'Fib' object does
推荐度:
标签: 详解 切片 python
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top