亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Python中的__getitem__方法與slice對(duì)象的切片操作

 更新時(shí)間:2016年06月27日 15:12:19   作者:cangmean  
Python中想要使類的實(shí)例像list一樣使用下標(biāo),可以用__getitem__方法,而配合slice對(duì)象則可以實(shí)現(xiàn)list一樣的切片,詳解Python中的__getitem__方法與slice對(duì)象的切片操作

Fib實(shí)例雖然能作用于for循環(huán),看起來和list有點(diǎn)像,但是,把它當(dāng)成list來使用還是不行,比如,取第5個(gè)元素:

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

要表現(xiàn)得像list那樣按照下標(biāo)取出元素,需要實(shí)現(xiàn)__getitem__()方法:

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

現(xiàn)在,就可以按下標(biāo)訪問數(shù)列的任意一項(xiàng)了:

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

slice對(duì)象與__getitem__

想要使類的實(shí)例像列表一樣使用下標(biāo), 可以設(shè)置__getitem__方法。比如:

class _List(object):

  def __getitem__(self, key):
    print key

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

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

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

會(huì)創(chuàng)建一個(gè)slice對(duì)象用于切片, 可以通過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是一個(gè)整形的話就返回列表元素,如果是一個(gè)slice對(duì)象的話,就創(chuàng)建一個(gè)實(shí)例并返回。

相關(guān)文章

  • 對(duì)python打亂數(shù)據(jù)集中X,y標(biāo)簽對(duì)的方法詳解

    對(duì)python打亂數(shù)據(jù)集中X,y標(biāo)簽對(duì)的方法詳解

    今天就為大家分享一篇對(duì)python打亂數(shù)據(jù)集中X,y標(biāo)簽對(duì)的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 最新評(píng)論