詳解Python中的 getitem

2022-09-28 04:21:09 字數 1519 閱讀 3907

fib例項雖然能作用於for迴圈,看起來和list有點像,但是,把它當成list來使用還是不行,比如,取第5個元素:

>&www.cppcns.comgt;> 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物件用於切片, 可以通過helwww.cppcns.comp(slice)檢視具體操作。

a = slice(1, 4, none)

range(5)[a] # print [1, 程式設計客棧2, 3]

更加豐富的操作

class _list(object):

www.cppcns.com 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 詳解python中 的用法

python中 的用法 是乙個裝飾器,針對函式,起呼叫傳參的作用。有修飾和被修飾的區別,function作為乙個裝飾器,用來修飾緊跟著的函式 可以是另乙個裝飾器,也可以是函式定義 結果1it s funa分析1 funa 修飾函式定義def func 將func 賦值給funa 的形參。執行的時候由...

詳解python中的 new

python中的 new 方法的使用 一丶object類中對 new 方法的定義 class object staticmethod known case of new def new cls,more known special case of object.new t.new s,a new o...

詳解 Python 中的變數

目錄 1.1 注釋 1.2 變數命名 1.3 變數賦值 1.4 同步賦值 在 python 中,使 標記注釋。注釋不會被 python 直譯器執 注釋是開發 員 來提醒 或他 程式如何 作的重要 段,注釋還會 在 檔的寫作中。display hello world print hello world...